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 :: Минимальная безопасность

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Совет
createl
Отправлено: 07 Января, 2013 - 15:32:43
Post Id



Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




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

И второй вопросик)) Возможно ли проведение атаки XSS если все что записывается в бд и потом выводится в браузер пропускается через функцию strip_tags, кроме удаления HTML тэгов <br><b>, а также регулярка убирает все что соответствует шаблону <script.../script>
 
 Top
Champion Супермодератор
Отправлено: 07 Января, 2013 - 18:53:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 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>
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Января, 2013 - 19:35:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Champion пишет:
А она учитывает, что после того, как убирается все что соответствует шаблону <script.../script>, то то, что получится, тоже может стать соответствовать шаблону <script.../script> ?)
шаблону <scri<script.../script>pt>realscript/script>
Кроме того я еще от себя добавлю вопрос: А учитывает ли ваш фильтр конструкции вида <b onclick="alert('XSS!');">
 
 Top
createl
Отправлено: 08 Января, 2013 - 11:42:26
Post Id



Гость


Покинул форум
Сообщений всего: 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>)
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace ("#<b\s.*?>#ism", '<b>', $text);
 
 Top
NoPaper
Отправлено: 08 Января, 2013 - 13:42:17
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




createl, а если bb-коды ввести? Заменять [ b ] на <b>, перенос строки на <br>, а перед обработкой пропустить через htmlspecialchars
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Января, 2013 - 14:40:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




NoPaper Смотря в каком контексте, если это форма комментариев или пост форума, то возможно "бб" будут актуальны. Однако если ввод производится с редактора типа CKEditor или TinyMCE, которые реализуют форматирование тегами, то "бб" тут и быть не может.

В любом случае ваш вариант похож на "побег от проблемы" нежели её решение. Закатив глазки
 
 Top
NoPaper
Отправлено: 08 Января, 2013 - 20:26:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




Тогда внутри тега b удалять знак '('. Довольно тяжело (и скорее всего невозможно) написать XSS без скобки.

Ну или заменять кавычки ' и " на ’ и “ соответственно
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Января, 2013 - 22:31:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




NoPaper пишет:
Довольно тяжело (и скорее всего невозможно) написать XSS без скобки
Если постараться, то можно. Да и тут встает вопрос о множественной проверке, ведь атрибутов может быть любое количество, а это опять дыра:
CODE (html):
скопировать код в буфер обмена
  1. <b onmousemove="var xss = 'XSS';" onmouseout="alert(xss);">
 
 Top
LIME
Отправлено: 08 Января, 2013 - 22:37:35
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




« Если постараться, то можно.»
нет
покажи
(Добавление)
document.body=null;
но это бессмысленно
 
 Top
spsu
Отправлено: 09 Января, 2013 - 04:47:54
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




Цитата:
Для того, чтобы защитить SQL использовал функцию mysql_real_escape_string в запросе.

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

При выводе из БД фильтровать теги через htmlsecialchars,
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB