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

Dima85

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

На данный момент я использую:
$text = htmlspecialchars($_POST['text']);
$text = mysql_real_escape_string($text);
Хватает ли этого? Или пользователи все же смогут как-то залить XSS, MySQL инекцию?
 

AnrDaemon

Продвинутый новичок
Это в принципе неверно. Нельзя применять к данным трансформации, не относящиеся к их отображению в пункте назначения.
htmlspecialchars() применяется ТОЛЬКО при отдаче данных в браузер.
wtf_escape_string() применяется ТОЛЬКО при записи данных в БД.
То, что делаете вы - гарантированный способ поиметь неслабую кучу проблем в ближайшем будущем.
 

AnrDaemon

Продвинутый новичок
Ну, давайте ещё и тут устроим филиал кеширования MySQL запросов…
 

Dima85

Новичок
Это в принципе неверно. Нельзя применять к данным трансформации, не относящиеся к их отображению в пункте назначения.
htmlspecialchars() применяется ТОЛЬКО при отдаче данных в браузер.
wtf_escape_string() применяется ТОЛЬКО при записи данных в БД.
То, что делаете вы - гарантированный способ поиметь неслабую кучу проблем в ближайшем будущем.

Хорошо htmlspecialchars() буду использовать только на отдаче данных в браузер.
mysql_real_escape_string($text); так же как и сейчас на запись в базу данных.
Хватает ли этого или нужно использовать что-то еще?
 

AnrDaemon

Продвинутый новичок
Не очень понимаю, при чём тут codemirror, но если стоит задача выводить текст из БД в виде текста (кода), то да, этого будет достаточно для корректного отображения данных и защиты их от повреждения при обработке.
 

CoolKid

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

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

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

А разве у кодемиррор нет встроенных средств защиты при выводе кода?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Как ты собираешься запускать <script>, если ты прошелся по выводу функцией htmlspecialchars()?
 

CoolKid

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

AnrDaemon

Продвинутый новичок
А постановку задачи вы не пробвали читать до того, как давать советы?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Давно прочитали, мне было интересно что скажет на мой вопрос CoolKid
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Очень было интересно как ты собрался запускать JS без тэга скрипт и после htmlspecialchars

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

CoolKid

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

Кстати, когда то давно мне кидали ссылку на подобную таблицу, только для уязвимостей, который позволяли обходить mysql_escape_string (нуль байты, трюки с кодировками итд). К сожалению, эту статью я прое...
 
Последнее редактирование:

Активист

Активист
Команда форума
А почему именно ТОЛЬКО при ВЫВОДЕ использовать htmlspecialchars? Модератор имеет право форматировать текст в HTML'е, а юзер например нет. И что делать?)
 

fixxxer

К.О.
Партнер клуба
Применять не htmlspecialchars, а иной фильтр при выводе, который будет иметь соответствующие настройки.
 

AnrDaemon

Продвинутый новичок
А почему именно ТОЛЬКО при ВЫВОДЕ использовать htmlspecialchars?
При выводе в браузер. Потому что эта трансформация повреждает исходные данные, но необходима для корректного отображения их на принимающей стороне.
 

Активист

Активист
Команда форума
При выводе в браузер. Потому что эта трансформация повреждает исходные данные, но необходима для корректного отображения их на принимающей стороне.
Ничего она не повреждает) Как она повреждает?
 

AnrDaemon

Продвинутый новичок
Код:
$ /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
Сверху