hook007
Доброй день!
Для безопасности кода, в частности XSS такая экранизация достаточная?
Вход в базу mysql:PHP:
Вывод с базы mysql: // тут обработка html кода к примеру: $str= preg_replace(«/(^|[n ])([w]*?)([w]*?://[w]+[^ ,«nrt<]*)/is», «[URL=’http://$3‘]$3[/URL]», $str);Буду благодарен за ответ
От модератора: Вставлять код надо кнопкой </>
mkramer
Жуткая мещанина из непонятной хрени. Прочти про каждую из используемых функций, зачем она. А в принципе, правила простые:
- Для предотвращения порчи запросов данными, а заодно защиты от SQL-инъекций использовать подготовленные запросы
- Для защиты от XSS пропускать данные через htmlspecialchars перед выводом
- Если нужно позволить вводить html, ограничить количество допустимых тегов. Самое простое решение для этого — strip_tags со списком разрешённых, есть более развитые решения через библиотеки.
hook007
Спасибо за ответ. Будьте добры подскажите пожалуйста, в если хранить в базе данных информацию без предварительной фильтрации htmlspecialchars, это ничего страшного?
mkramer
Базе похрен, она не умеет исполнять джаваскрипт. Надо всегда понимать, что зачем делается. Почему мы защищаемся от sql-инъекций? Потому что не хотим, чтоб база исполнила SQL запрос, который мы не писали. Почему мы экранируем HTML при выводе данных? Потому что не хотим, чтоб браузер исполнил жабаскрипт, который мы не писали. Всё же просто.
hook007
Спасибо Вам! Подумал лучше утвержусь за счет мнения специалиста!
miketomlin
Большинство обычно так и делает. Но проблема в том, что в этом случае возрастает нагрузка при выводе, особенно если вы используете «неразвитое» кеширование/не используете его совсем.
mkramer
@miketomlin И при какой нагрузке на сайт это действительно становится проблемой?
— Добавлено —
Из известных мне движков OpenCart хранит в базе информацию, уже пропущенную через htmlspecialchars, а при выводе они даже в третей версии из твига выпилили автоматический вызов этой функции для выводимых данных. Но работать с такими данными не фантастика как удобно.
miketomlin
Не знаю. Я так никогда не делаю.
Смотря как работать. То что я написал, не означает, что нужно совсем отказываться от хранения данных в исходном виде.
Сержан
Здравствуйте!!
есть строки полученное пост запросам из кода Latex формулы
Вот один из них:
$content = «{f}^{text{‘}}left(xright)=2x+2«;
нужно экранировать только апостроф, что бы записать в базу данных MySQL.
mkramer
@Сержан, пользуйтесь подготовленными запросами, база сама всё что надо сделает. Контент не исказится.