Экранирование символов

hook007

Доброй день!
Для безопасности кода, в частности XSS такая экранизация достаточная?
Вход в базу mysql:

PHP:
  1. $str = trim($str);
  2. $str = addslashes($str);
  3.  
  4. Вывод с базы mysql:
  5. $str = html_entity_decode($str);
  6. // тут обработка html кода к примеру:
  7. $str= preg_replace(«/(^|[n ])([w]*?)([w]*?://[w]+[^ ,«nrt<]*)/is», «[URL=’http://$3‘]$3[/URL]», $str);
  8. $str = htmlspecialchars($str);
  9. $str = nl2br($str);

Буду благодарен за ответ ;)

От модератора: Вставлять код надо кнопкой </>

 

mkramer

Жуткая мещанина из непонятной хрени. Прочти про каждую из используемых функций, зачем она. А в принципе, правила простые:

  1. Для предотвращения порчи запросов данными, а заодно защиты от SQL-инъекций использовать подготовленные запросы
  2. Для защиты от XSS пропускать данные через htmlspecialchars перед выводом
  3. Если нужно позволить вводить 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

@Сержан, пользуйтесь подготовленными запросами, база сама всё что надо сделает. Контент не исказится.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *