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]   

> Без описания
Гость
Отправлено: 17 Января, 2009 - 14:18:42
Post Id


УДАЛЁН










Собственно сабж...

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.  


Возвращает

(Отредактировано автором: 17 Января, 2009 - 14:19:57)

 
 Top
Champion Супермодератор
Отправлено: 17 Января, 2009 - 14:40:23
Post Id



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


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


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




Зачем так?
 
 Top
vitaliy_mad
Отправлено: 17 Января, 2009 - 23:24:29
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


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




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.  


Результат:

(Отредактировано автором: 17 Января, 2009 - 23:26:12)

 
 Top
valenok Модератор
Отправлено: 17 Января, 2009 - 23:38:23
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Одно только не ясно.. это новый метод защиты от sql инъекций ?


-----
Truly yours, Sasha.
 
My status
 Top
vitaliy_mad
Отправлено: 18 Января, 2009 - 11:43:48
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


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




valenok пишет:
Одно только не ясно.. это новый метод защиты от sql инъекций ?

Очень похоже на это.... способ оригинальный, ничего не скажешь... ))
 
 Top
Гость
Отправлено: 18 Января, 2009 - 12:06:36
Post Id


УДАЛЁН










Задумывал сначал как способ от sql инъекций , но потом понял что не годится,
(Добавление)
в одном движке увидел такой метод защиты, правда там один раз резалось слово и без учета регистра
 
 Top
vitaliy_mad
Отправлено: 18 Января, 2009 - 12:21:18
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


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




просто объясни как строк "asElsElECtEcTb" можно использовать в SQL-инъекции? пусть там в строке даже трижды будет SELECT...
 
 Top
Гость
Отправлено: 18 Января, 2009 - 13:11:40
Post Id


УДАЛЁН










вот так:
есть ссылка 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/* - тоесть скрипт однораово вырежет слова а они снова появилшись в строке параметров. ВОТ КК раз для этого нужно МНОГО КРАТНО ВЫРЕЗАТЬ СЛОВА БЕЗ УЧЕТА РЕГИСТРА.
 
 Top
vitaliy_mad
Отправлено: 18 Января, 2009 - 13:18:11
Post Id


Участник


Покинул форум
Сообщений всего: 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);
тогда в любом случае запрос выполниться без ошибок, но может с пустым результатом, и никаких лишних данных не выдаст!

(Отредактировано автором: 18 Января, 2009 - 13:39:57)

 
 Top
Гость
Отправлено: 18 Января, 2009 - 13:35:25
Post Id


УДАЛЁН










я знаю что это не самыйл лучший вариант, просто вот написал функцию, а мож она пригадится для лругих каких-нибудь целей, например антимат... Стандартной та функции пхп нет же такой.....
 
 Top
vitaliy_mad
Отправлено: 18 Января, 2009 - 13:38:51
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


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




ну может быть и пригодиться... Подмигивание
 
 Top
Champion Супермодератор
Отправлено: 18 Января, 2009 - 13:50:04
Post Id



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


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


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




Это не sql инъекция. Когда из-за попытки произвести инъекцию лезут ошибки - это другое. Это криваю инъекция. Хотя тоже плохо. Узнает нехороший человек что-то из вывода сообщения об ошибке и сделает не кривую инъекцию. Вот если злоумышленник передаст id=5 or 2>1 и увидит всё. Если ты отсюда и уберешь слово or, будет синтаксическая ошибка. Так что ббработай на цифры и отключи вывод ошибок.
Или делай "select ... where id = '$id', при этом убери или заэкранируй все кавычки и слеши в $id.
Вот и всё.
(Добавление)
Поэтому я не вижу смысла вырезать слова. Просто отключи вывод об ошибках и обрабатывай данные, как чуть выше написано.
 
 Top
vitaliy_mad
Отправлено: 18 Января, 2009 - 14:08:39
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


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




Champion пишет:
Это не sql инъекция. Когда из-за попытки произвести инъекцию лезут ошибки - это другое.

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

PS: истина рождается во время спора...
 
 Top
valenok Модератор
Отправлено: 18 Января, 2009 - 21:16:48
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




А ты вообще не пробовал использоваться mysql_escape_string, intval и кавычки ?
Рекомендации по безопасности даже заняли порядка трёх страниц на самом видном месте в документации. Попробуй её почитать ;)


-----
Truly yours, Sasha.
 
My status
 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