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
Форумы портала PHP.SU :: Версия для печати :: Минимальная безопасность
Форумы портала PHP.SU » » Вопросы новичков » Минимальная безопасность

Страниц (1): [1]
 

1. createl - 07 Января, 2013 - 15:32:43 - перейти к сообщению
Насколько я понял, любимые ухищрения хацкеров, это sql инъекция в запрос sql и XSS атака, что собой являет отображение в браузер какого то исполняемого кода, который может добавить сам сторонний пользователь. Для того, чтобы защитить SQL использовал функцию mysql_real_escape_string в запросе. А вот не совсем дошло до меня, что именно она делает. Подскажите, в самой базе, данные останутся без изменений, как и в случае неиспользования этой функции? Если я перекидываю данные из одной БД в другую скриптом, мне также нужно использовать mysql_real_escape_string?

И второй вопросик)) Возможно ли проведение атаки XSS если все что записывается в бд и потом выводится в браузер пропускается через функцию strip_tags, кроме удаления HTML тэгов <br><b>, а также регулярка убирает все что соответствует шаблону <script.../script>
2. Champion - 07 Января, 2013 - 18:53:39 - перейти к сообщению
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>
3. DeepVarvar - 07 Января, 2013 - 19:35:24 - перейти к сообщению
Champion пишет:
А она учитывает, что после того, как убирается все что соответствует шаблону <script.../script>, то то, что получится, тоже может стать соответствовать шаблону <script.../script> ?)
шаблону <scri<script.../script>pt>realscript/script>
Кроме того я еще от себя добавлю вопрос: А учитывает ли ваш фильтр конструкции вида <b onclick="alert('XSS!');">
4. createl - 08 Января, 2013 - 11:42:26 - перейти к сообщению
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>)
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace ("#<b\s.*?>#ism", '<b>', $text);
5. NoPaper - 08 Января, 2013 - 13:42:17 - перейти к сообщению
createl, а если bb-коды ввести? Заменять [ b ] на <b>, перенос строки на <br>, а перед обработкой пропустить через htmlspecialchars
6. DeepVarvar - 08 Января, 2013 - 14:40:57 - перейти к сообщению
NoPaper Смотря в каком контексте, если это форма комментариев или пост форума, то возможно "бб" будут актуальны. Однако если ввод производится с редактора типа CKEditor или TinyMCE, которые реализуют форматирование тегами, то "бб" тут и быть не может.

В любом случае ваш вариант похож на "побег от проблемы" нежели её решение. Закатив глазки
7. NoPaper - 08 Января, 2013 - 20:26:30 - перейти к сообщению
Тогда внутри тега b удалять знак '('. Довольно тяжело (и скорее всего невозможно) написать XSS без скобки.

Ну или заменять кавычки ' и " на ’ и “ соответственно
8. DeepVarvar - 08 Января, 2013 - 22:31:57 - перейти к сообщению
NoPaper пишет:
Довольно тяжело (и скорее всего невозможно) написать XSS без скобки
Если постараться, то можно. Да и тут встает вопрос о множественной проверке, ведь атрибутов может быть любое количество, а это опять дыра:
CODE (html):
скопировать код в буфер обмена
  1. <b onmousemove="var xss = 'XSS';" onmouseout="alert(xss);">
9. LIME - 08 Января, 2013 - 22:37:35 - перейти к сообщению
« Если постараться, то можно.»
нет
покажи
(Добавление)
document.body=null;
но это бессмысленно
10. spsu - 09 Января, 2013 - 04:47:54 - перейти к сообщению
Цитата:
Для того, чтобы защитить SQL использовал функцию mysql_real_escape_string в запросе.

Ну и приведение типов(для числовых значений).
Цитата:
Интересно, как с этим бороться?!

При выводе из БД фильтровать теги через htmlsecialchars,

 

Powered by ExBB FM 1.0 RC1