htmlspecialchars, mysql_real_escape_string хватает ли этого для безопасности?

  • Автор темы Автор темы Dima85
  • Дата начала Дата начала

Dima85

Новичок
Пользователям нужно дать возможность записывать в базу html код и потом его выводить на сайт через textarea и http://codemirror.net/index.html

На данный момент я использую:
$text = htmlspecialchars($_POST['text']);
$text = mysql_real_escape_string($text);
Хватает ли этого? Или пользователи все же смогут как-то залить XSS, MySQL инекцию?
 
Это в принципе неверно. Нельзя применять к данным трансформации, не относящиеся к их отображению в пункте назначения.
htmlspecialchars() применяется ТОЛЬКО при отдаче данных в браузер.
wtf_escape_string() применяется ТОЛЬКО при записи данных в БД.
То, что делаете вы - гарантированный способ поиметь неслабую кучу проблем в ближайшем будущем.
 
Ну, давайте ещё и тут устроим филиал кеширования MySQL запросов…
 
Это в принципе неверно. Нельзя применять к данным трансформации, не относящиеся к их отображению в пункте назначения.
htmlspecialchars() применяется ТОЛЬКО при отдаче данных в браузер.
wtf_escape_string() применяется ТОЛЬКО при записи данных в БД.
То, что делаете вы - гарантированный способ поиметь неслабую кучу проблем в ближайшем будущем.


Хорошо htmlspecialchars() буду использовать только на отдаче данных в браузер.
mysql_real_escape_string($text); так же как и сейчас на запись в базу данных.
Хватает ли этого или нужно использовать что-то еще?
 
Не очень понимаю, при чём тут codemirror, но если стоит задача выводить текст из БД в виде текста (кода), то да, этого будет достаточно для корректного отображения данных и защиты их от повреждения при обработке.
 
Ну, давайте ещё и тут устроим филиал кеширования MySQL запросов…
Всегда готов! Как Гагарин и Титов (с)
Хватает ли этого или нужно использовать что-то еще?
Для того чтобы записать в базу хватит, для полноценной безопасности - нет

Можно strip_tags сделать и вырезать например тег <script> хотя бы

Хотя существует ещё миллион способов запустить javascript и без тега script

А разве у кодемиррор нет встроенных средств защиты при выводе кода?
 
Как ты собираешься запускать <script>, если ты прошелся по выводу функцией htmlspecialchars()?
 
Как ты собираешься запускать <script>, если ты прошелся по выводу функцией htmlspecialchars()?
Я вообще ничего и нигде запускать не собираюсь) Я просто предложил вырезать тег script или какие-либо другие теги, например iframe, если наличие их не подразумевается впринципе.
 
А постановку задачи вы не пробвали читать до того, как давать советы?
 
Давно прочитали, мне было интересно что скажет на мой вопрос CoolKid
 
Очень было интересно как ты собрался запускать JS без тэга скрипт и после htmlspecialchars

Хотя существует ещё миллион способов запустить javascript и без тега script

Или я чего не понял?
 
Когда я говорил про миллион способов, я имел ввиду это
Я не знаю обойдет ли хотя бы один из этих способов htmlspecialchars() или нет, т.к. среди них есть довольно закомуристые, включая трюки с кодировкой.
Я просто хотел сказать что к этому вопросу надо подходить комплексно, не полагаясь на одну лишь PHP-ную функцию

Кстати, когда то давно мне кидали ссылку на подобную таблицу, только для уязвимостей, который позволяли обходить mysql_escape_string (нуль байты, трюки с кодировками итд). К сожалению, эту статью я прое...
 
Последнее редактирование:
А почему именно ТОЛЬКО при ВЫВОДЕ использовать htmlspecialchars? Модератор имеет право форматировать текст в HTML'е, а юзер например нет. И что делать?)
 
Применять не htmlspecialchars, а иной фильтр при выводе, который будет иметь соответствующие настройки.
 
А почему именно ТОЛЬКО при ВЫВОДЕ использовать htmlspecialchars?
При выводе в браузер. Потому что эта трансформация повреждает исходные данные, но необходима для корректного отображения их на принимающей стороне.
 
При выводе в браузер. Потому что эта трансформация повреждает исходные данные, но необходима для корректного отображения их на принимающей стороне.
Ничего она не повреждает) Как она повреждает?
 
Код:
$ /usr/bin/php -r "print htmlspecialchars(file_get_contents('003-Options-common.htm'));" | diff -q 003-Options-common.htm -
Файлы 003-Options-common.htm и - различаются.
 
Если вам нужен htmlspecialchars то его можно сохранить в БД и все будет прекрасно работать. Если вам нужно обратное действие (например выгрузка в XLS), есть htmlsepcialchars_decode.
 
  • Like
Реакции: AmdY
Сверху