Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Минимальная безопасность
Покинул форум
Сообщений всего: 87
Дата рег-ции: Янв. 2012
Помог: 0 раз(а)
Насколько я понял, любимые ухищрения хацкеров, это sql инъекция в запрос sql и XSS атака, что собой являет отображение в браузер какого то исполняемого кода, который может добавить сам сторонний пользователь. Для того, чтобы защитить SQL использовал функцию mysql_real_escape_string в запросе. А вот не совсем дошло до меня, что именно она делает. Подскажите, в самой базе, данные останутся без изменений, как и в случае неиспользования этой функции? Если я перекидываю данные из одной БД в другую скриптом, мне также нужно использовать mysql_real_escape_string?
И второй вопросик)) Возможно ли проведение атаки XSS если все что записывается в бд и потом выводится в браузер пропускается через функцию strip_tags, кроме удаления HTML тэгов <br><b>, а также регулярка убирает все что соответствует шаблону <script.../script>
Champion
Отправлено: 07 Января, 2013 - 18:53:39
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
createl пишет:
А вот не совсем дошло до меня, что именно она делает. Подскажите, в самой базе, данные останутся без изменений, как и в случае неиспользования этой функции?
Она, например, экранирует символы-ограничители строки. Если в столбец stolb нужно вставить значение o'henry и в запросе образуется кусок типа stolb = 'o'henry', то будет синтаксическая ошибка. Если написано stolb = 'o\'henry', то все будет хорошо. Ну и разумеется, не экранируя строки можно добиться более интересных вещей, чем синтаксические ошибки: если речь о вставке, то вставить такую запись, какую хотите вы, а не какую формирует php скрипт(например, зарегить пользователя со статусом админ, если структуры данных позволяют). При селектах - сделать заведомо выполнимое условие, добавить limit - и получить любую строку таблицы. Вот.
В базу, разумеется, данные попадают как есть. Экранирование не изменяет сами данные, оно их преобразует так, чтобы спецсимволы, которые в них присутсвуют, трактовались как обычные символы и теряли свои спец-способности.
createl пишет:
Если я перекидываю данные из одной БД в другую скриптом
Смотря, каким скриптом. Если sql скриптом типа insert select или create table as select, то не нужно. Если скрипт работает не в самой субд, а является для нее клиентом, то нужно экранировать.
createl пишет:
strip_tags
В общем, избавит, но вырезание тэгов может быть не желательно. Может, я реально хочу написать Вам "<b><b><b><b>". Есть htmlentities.
createl пишет:
также регулярка убирает все что соответствует шаблону <script.../script>
А она учитывает, что после того, как убирается все что соответствует шаблону <script.../script>, то то, что получится, тоже может стать соответствовать шаблону <script.../script> ?)
шаблону <scri<script.../script>pt>realscript/script>
DeepVarvar
Отправлено: 07 Января, 2013 - 19:35:24
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Champion пишет:
А она учитывает, что после того, как убирается все что соответствует шаблону <script.../script>, то то, что получится, тоже может стать соответствовать шаблону <script.../script> ?)
шаблону <scri<script.../script>pt>realscript/script>
Кроме того я еще от себя добавлю вопрос: А учитывает ли ваш фильтр конструкции вида <b onclick="alert('XSS!');">
Покинул форум
Сообщений всего: 87
Дата рег-ции: Янв. 2012
Помог: 0 раз(а)
Champion пишет:
Смотря, каким скриптом. Если sql скриптом типа insert select или create table as select, то не нужно. Если скрипт работает не в самой субд, а является для нее клиентом, то нужно экранировать.
скрипты по типу такие же как и при добавлении в БД извне, просто источник данных другой sql запрос, предназначенный для выборки данных. Это и требовалось узнать. Значит остальные скрипты, не будет лишним экранировать при помощи mysql_real_escape_string.
Champion пишет:
В общем, избавит, но вырезание тэгов может быть не желательно. Может, я реально хочу написать Вам "<b><b><b><b>". Есть htmlentities.
Ну если рассматривать конкретно этот случай, то мне достаточно того, что остаются b и br тэги. Для более серьезной вещи действительно полезно будет освоить возможности htmlentities
Champion пишет:
А она учитывает, что после того, как убирается все что соответствует шаблону <script.../script>, то то, что получится, тоже может стать соответствовать шаблону <script.../script> ?)
шаблону <scri<script.../script>pt>realscript/script>
Если честно, я в ступоре. Разумеется, в моем случае, регулярка уберет правильные тэги, тем самым склеив огрызки и на выходе останется зловред. Уже понял, что не зря создал тему, только потому, что узнал о такой возможности (самому в голову никогда ничего подобного не приходило). Это нужно будет осмыслить более глубоко.
DeepVarvar пишет:
Кроме того я еще от себя добавлю вопрос: А учитывает ли ваш фильтр конструкции вида <b onclick="alert('XSS!');">
Конструкция свободно проскочила. В браузере при клике вылезает окно алерта. На форуме античата читал, в образовательных целях, как организовать XSS атаку. Первое, что предлагается, при поиске уязвимостей, это попытаться сделать вывод этой конструкции в браузер. Дальше говорилось, про кражу кук каким то перенаправлением - полность осмыслить все не смог. Ну да ладно. Пока не столь важно. Интересно, как с этим бороться?! Первое что приходит на ум, если совсем никакого желания писать это в БД, для фильтрации тэга <b>(акцент на мой случай, потому что пропускается всего пара тэгов <b> и <br>)
Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012 Откуда: Минск
Помог: 9 раз(а)
createl, а если bb-коды ввести? Заменять [ b ] на <b>, перенос строки на <br>, а перед обработкой пропустить через htmlspecialchars
DeepVarvar
Отправлено: 08 Января, 2013 - 14:40:57
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
NoPaper Смотря в каком контексте, если это форма комментариев или пост форума, то возможно "бб" будут актуальны. Однако если ввод производится с редактора типа CKEditor или TinyMCE, которые реализуют форматирование тегами, то "бб" тут и быть не может.
В любом случае ваш вариант похож на "побег от проблемы" нежели её решение.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.