PDA

View Full Version : запрет на запросы (post и Get)


Alexander-V-Sh
09.08.2006, 05:06
В нюке есть запрет на некоторые запросы.

В майнфале, например:

foreach ($_GET as $sec_key => $secvalue) {
if((eregi("<[^>]*script*\"?[^>]*", $secvalue)) ||
(eregi("<[^>]*object*\"?[^>]*", $secvalue)) || и т.д.

Смотрел как сделано, никак не соображу. Написал:

(eregi("UNION", $secvalue)) ||

modules.php?name=News&UNION - нормально, кажит новости

modules.php?name=News&op=UNION - переводит на ошибку


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

Где бы не попало в запросе (ссылке) UNION, SELECT, префиксы, INTO, аппостраф и т.д. - сразу ошибка. Пусть даже если усер в поиске введет :)

Soniks
09.08.2006, 23:35
Alexander-V-Sh а в чем вопрос?

Alexander-V-Sh
10.08.2006, 01:54
Soniks

как правильно написать запретные слова чтобы вообще в ссылках не попадались, нигде, хоть вначале, хоть в середине, хоть как. :)

например пишу (а еще используется <[^>]* например в других строках)
(eregi("UNION", $secvalue)) ||

а modules.php?name=News&UNION нормально проходит...

Просто прочитал статейку про иньекции, где нет проверки переменных. Там как раз в строчку эта дрянь и вбивается. Проверки то ставлю, но вдруг где пропустил... модулей то и функций полно...

Или всетаки писать так :
(eregi("UNION", $secvalue)) ||
(eregi("SELECT", $secvalue)) ||
(eregi("INTO", $secvalue)) ||
(eregi("[", $secvalue)) ||
(eregi("]", $secvalue)) ||
(eregi("UPDATE", $secvalue)) ||
и т.д.

И этого достаточно чтобы блокировать нежелательные строки?
А то что modules.php?name=News&UNION проходит - ничего страшного, т.к. не угрожает, в отличч от modules.php?name=News&op=UNION, которая блокируется.

Soniks
13.08.2006, 13:37
Alexander-V-Sh этот вариант не опасен modules.php?name=News&UNION , т.к. в скрипт передается переменная UNION и она не где не используется, а вот второй вариант опасен, т.к. в переменную op передается опасный код и он может быть задействован. Что бы фильтровать не только значение переменных, а и название самих переменных передающие методом GET, то тогда надо фильтровать не сам $_GET, а $_SERVER['QUERY_STRING'] это строка запроса к скрипту. можете посмотреть как это все выволнено в Сантинеле