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 » PHP » Пользовательские функции » функция, которая вырезает комбинацию символов МНОГОКРАТНО И БЕЗ УЧЕТА РЕГИСТРА

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

1. Гость - 17 Января, 2009 - 14:18:42 - перейти к сообщению
Собственно сабж...

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function bezopasnost($str) {
  4. if(!isset($str)) { return 0; }
  5. else {
  6. $bad_words = array('select','union','update','delete');
  7. foreach($bad_words as $word) {
  8. for($i=1;$i<100;$i++)
  9. { $str =  str_ireplace($word, '',$str); }
  10. }
  11. return $str; } }
  12. ?>
  13.  



Вызываем
PHP:
скопировать код в буфер обмена
  1.  
  2. bezopasnost('asElsElECtEcTb');
  3.  


Возвращает

2. Champion - 17 Января, 2009 - 14:40:23 - перейти к сообщению
Зачем так?
3. vitaliy_mad - 17 Января, 2009 - 23:24:29 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function pars($str,$arr)
  3. {
  4.     foreach ($arr as $mtch)
  5.     {
  6.         while(preg_match("/$mtch/i",$str))
  7.         {
  8.             $str=str_ireplace("$mtch","",$str);
  9.         }
  10.     }
  11.     return $str;
  12. }
  13.  
  14.  
  15. $a='asElsElECtEcTb';
  16. $match=array('select','union','update','delete');
  17. print pars($a,$match);
  18. ?>
  19.  


Результат:
CODE (text):
скопировать код в буфер обмена
  1. ab
4. valenok - 17 Января, 2009 - 23:38:23 - перейти к сообщению
Одно только не ясно.. это новый метод защиты от sql инъекций ?
5. vitaliy_mad - 18 Января, 2009 - 11:43:48 - перейти к сообщению
valenok пишет:
Одно только не ясно.. это новый метод защиты от sql инъекций ?

Очень похоже на это.... способ оригинальный, ничего не скажешь... ))
6. Гость - 18 Января, 2009 - 12:06:36 - перейти к сообщению
Задумывал сначал как способ от sql инъекций , но потом понял что не годится,
(Добавление)
в одном движке увидел такой метод защиты, правда там один раз резалось слово и без учета регистра
7. vitaliy_mad - 18 Января, 2009 - 12:21:18 - перейти к сообщению
просто объясни как строк "asElsElECtEcTb" можно использовать в SQL-инъекции? пусть там в строке даже трижды будет SELECT...
8. Гость - 18 Января, 2009 - 13:11:40 - перейти к сообщению
вот так:
есть ссылка 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/* - тоесть скрипт однораово вырежет слова а они снова появилшись в строке параметров. ВОТ КК раз для этого нужно МНОГО КРАТНО ВЫРЕЗАТЬ СЛОВА БЕЗ УЧЕТА РЕГИСТРА.
9. vitaliy_mad - 18 Января, 2009 - 13:18:11 - перейти к сообщению
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);
тогда в любом случае запрос выполниться без ошибок, но может с пустым результатом, и никаких лишних данных не выдаст!
10. Гость - 18 Января, 2009 - 13:35:25 - перейти к сообщению
я знаю что это не самыйл лучший вариант, просто вот написал функцию, а мож она пригадится для лругих каких-нибудь целей, например антимат... Стандартной та функции пхп нет же такой.....
11. vitaliy_mad - 18 Января, 2009 - 13:38:51 - перейти к сообщению
ну может быть и пригодиться... Подмигивание
12. Champion - 18 Января, 2009 - 13:50:04 - перейти к сообщению
Это не sql инъекция. Когда из-за попытки произвести инъекцию лезут ошибки - это другое. Это криваю инъекция. Хотя тоже плохо. Узнает нехороший человек что-то из вывода сообщения об ошибке и сделает не кривую инъекцию. Вот если злоумышленник передаст id=5 or 2>1 и увидит всё. Если ты отсюда и уберешь слово or, будет синтаксическая ошибка. Так что ббработай на цифры и отключи вывод ошибок.
Или делай "select ... where id = '$id', при этом убери или заэкранируй все кавычки и слеши в $id.
Вот и всё.
(Добавление)
Поэтому я не вижу смысла вырезать слова. Просто отключи вывод об ошибках и обрабатывай данные, как чуть выше написано.
13. vitaliy_mad - 18 Января, 2009 - 14:08:39 - перейти к сообщению
Champion пишет:
Это не sql инъекция. Когда из-за попытки произвести инъекцию лезут ошибки - это другое.

никто и не спорит... 100% не иньекция, а неприятность...

PS: истина рождается во время спора...
14. valenok - 18 Января, 2009 - 21:16:48 - перейти к сообщению
А ты вообще не пробовал использоваться mysql_escape_string, intval и кавычки ?
Рекомендации по безопасности даже заняли порядка трёх страниц на самом видном месте в документации. Попробуй её почитать ;)

 

Powered by ExBB FM 1.0 RC1