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 :: функция, которая вырезает комбинацию символов МНОГОКРАТНО И БЕЗ УЧЕТА РЕГИСТРА
Задумывал сначал как способ от sql инъекций , но потом понял что не годится, (Добавление)
в одном движке увидел такой метод защиты, правда там один раз резалось слово и без учета регистра
vitaliy_mad
Отправлено: 18 Января, 2009 - 12:21:18
Участник
Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008 Откуда: Украина, Мариуполь
Помог: 0 раз(а)
просто объясни как строк "asElsElECtEcTb" можно использовать в SQL-инъекции? пусть там в строке даже трижды будет SELECT...
вот так:
есть ссылка index.php?id=33456
прообуем инекцию сделать index.php?id=-1+union+select+1,1,1+order+by+8/*
скрипт режет слова union,select
тогда пытаемся вот так index.php?id=-1+uNiOn+sElEcT+1,1,1+order+by+8/*
а скрипт который режет несмотря на регистр, опять вырезал слова select,union
пробуем вот так теперь index.php?id=-1+uniunionon+selselectect+1,1,1+order+by+8/*
и вот тут самый важный момент!
если скрипт не мноократно режет слова, то если сделать вот так index.php?id=-1+uniunionon+selselectect+1,1,1+order+by+8/* то получится index.php?id=-1+union+select+1,1,1+order+by+8/* - тоесть скрипт однораово вырежет слова а они снова появилшись в строке параметров. ВОТ КК раз для этого нужно МНОГО КРАТНО ВЫРЕЗАТЬ СЛОВА БЕЗ УЧЕТА РЕГИСТРА.
vitaliy_mad
Отправлено: 18 Января, 2009 - 13:18:11
Участник
Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008 Откуда: Украина, Мариуполь
Помог: 0 раз(а)
Krist_ALL пишет:
index.php?id=-1+union+select+1,1,1+order+by+8
а тепреь давай посмотрим что за запрос в итоге выйдет:
select * from table where id=1 1,1,1 order by 8
или
select * from table where id='1 1,1,1 order by 8'
если второй вариант, т.е. id - строка, то еще пол беды а вот в случае с первым, у тебя полезут ошибки... в которых ты выдашь свои секретные названия таблиц... (Добавление)
хотя, конечно вывод ошибок зависит от настроек сарвера... но никогда нельзя предусмотреть все...
ИМХО: лучше делать проверку анных в данном случае в поле id убирать все НЕ ЦИФРЫ например так $id=preg_replace("/\D/","",$id);
тогда в любом случае запрос выполниться без ошибок, но может с пустым результатом, и никаких лишних данных не выдаст!
я знаю что это не самыйл лучший вариант, просто вот написал функцию, а мож она пригадится для лругих каких-нибудь целей, например антимат... Стандартной та функции пхп нет же такой.....
vitaliy_mad
Отправлено: 18 Января, 2009 - 13:38:51
Участник
Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008 Откуда: Украина, Мариуполь
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Это не sql инъекция. Когда из-за попытки произвести инъекцию лезут ошибки - это другое. Это криваю инъекция. Хотя тоже плохо. Узнает нехороший человек что-то из вывода сообщения об ошибке и сделает не кривую инъекцию. Вот если злоумышленник передаст id=5 or 2>1 и увидит всё. Если ты отсюда и уберешь слово or, будет синтаксическая ошибка. Так что ббработай на цифры и отключи вывод ошибок.
Или делай "select ... where id = '$id', при этом убери или заэкранируй все кавычки и слеши в $id.
Вот и всё. (Добавление)
Поэтому я не вижу смысла вырезать слова. Просто отключи вывод об ошибках и обрабатывай данные, как чуть выше написано.
vitaliy_mad
Отправлено: 18 Января, 2009 - 14:08:39
Участник
Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008 Откуда: Украина, Мариуполь
Помог: 0 раз(а)
Champion пишет:
Это не sql инъекция. Когда из-за попытки произвести инъекцию лезут ошибки - это другое.
никто и не спорит... 100% не иньекция, а неприятность...
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
А ты вообще не пробовал использоваться mysql_escape_string, intval и кавычки ?
Рекомендации по безопасности даже заняли порядка трёх страниц на самом видном месте в документации. Попробуй её почитать ;)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.