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