Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обход регулярного выражения
 
 автор: -Lex-   (04.04.2008 в 16:18)   письмо автору
 
 

Добрый день.

У меня в PHP скрипте с помощью регулярного выражения осуществляется проверка _GET и _POST _SESSION массивов.
В них разрешены только буквы и цифры. Массив _SERVER нигде не использую. Использую это как защита скрипта от взлома. Мне вот грозятся данную защиту обойти... Реально ли это?

   
 
 автор: Atheist   (04.04.2008 в 16:40)   письмо автору
 
   для: -Lex-   (04.04.2008 в 16:18)
 

1. Приведи пример своего regexp'а.
2. Нужно не "разрешать только буквы и цифры", а правильно обрабатывать входящие данные. Проверка нужна не для того, чтобы сводить с ума обычного пользователя, а препятствовать неправильной работе скрипта. Любой пользователь может попытаться отправить безобидный текст (текст вообще другим быть и не может), который будет расценен твоим скриптом, как "хакерская атака".

[поправлено модератором]

   
 
 автор: -Lex-   (04.04.2008 в 18:28)   письмо автору
 
   для: Atheist   (04.04.2008 в 16:40)
 

[^A-Z,a-z,0-9,_,,,--,.,!,?,(,),:,й,ц,у,к,е,н,г,ш,щ,з,х,ъ,ф,ы,в,а,п,р,о,л,д,ж,э,я,ч,с,м,и,т,ь,б,ю,Й,Ц,У,К,Е,Н,Г,Ш,Щ,З,Х,Ъ,Ф,Ы,В,А,П,Р,О,Л,Д,Ж,Э,Я,Ч,С,М,И,Т,Ь,Б,Ю, ,#,@,;]

Да уже как год использую, никто не жаловался... Регистраций на портале 30000, а онлайн около 400 :) Так что нормально...
Зато безопасно 8-)

   
 
 автор: THERAPYbrother   (04.04.2008 в 19:05)   письмо автору
 
   для: -Lex-   (04.04.2008 в 18:28)
 

й,ц,у,к,е,н,г,ш,щ,з,х,ъ,ф,ы,в,а,п,р,о,л,д,ж,э,я,ч,с,м,и,т,ь,б,ю,Й,Ц,У,К,Е,Н,Г,Ш,Щ,З,Х,Ъ,Ф,Ы,В,А,П,Р,О,Л,Д,Ж,Э,Я,Ч,С,М,И,Т,Ь,Б,Ю,
мда..
не проще написать а-я ?
и зачем вам столько запятых?
чтобы 100% запятую обнаружить в тексте?

   
 
 автор: -Lex-   (04.04.2008 в 19:11)   письмо автору
 
   для: THERAPYbrother   (04.04.2008 в 19:05)
 

От А-Я не работает... Проверял... Филтр не проходит если написать русскую букву. Если не ставить зяпятые между буквами, то они считаются как слово...

   
 
 автор: THERAPYbrother   (04.04.2008 в 19:28)   письмо автору
 
   для: -Lex-   (04.04.2008 в 19:11)
 

Если не ставить зяпятые между буквами, то они считаются как слово
это вы где такое прочитали?

   
 
 автор: -Lex-   (04.04.2008 в 19:29)   письмо автору
 
   для: THERAPYbrother   (04.04.2008 в 19:28)
 

Это я не читал, а проверил на собственной шкуре :)

   
 
 автор: THERAPYbrother   (04.04.2008 в 19:33)   письмо автору
 
   для: -Lex-   (04.04.2008 в 19:11)
 

Вы точно этой регуляркой пользуетесь??

   
 
 автор: -Lex-   (04.04.2008 в 20:17)   письмо автору
 
   для: THERAPYbrother   (04.04.2008 в 19:33)
 

Насчет А-Я вместо перечисления, на localhost нормально работает, а вот когда на сервер зашружаю, уже не хочет.

   
 
 автор: Atheist   (04.04.2008 в 19:46)   письмо автору
 
   для: -Lex-   (04.04.2008 в 19:11)
 

> От А-Я не работает
А какая кодировка (букв в regexp и, соотвественно, текста, с которым работаешь)?

   
 
 автор: -Lex-   (04.04.2008 в 20:10)   письмо автору
 
   для: Atheist   (04.04.2008 в 19:46)
 

UTF-8 и в скрипте и от пользователей.

   
 
 автор: -Lex-   (04.04.2008 в 20:41)   письмо автору
 
   для: -Lex-   (04.04.2008 в 20:10)
 

Ну что, упростил выражение до:
[^A-Z0-9_,-.!?():йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ #@;]

До

[^A-ZА-Я0-9_,-.!?(): #@;]

если упростить, не пропускает символы русского алфавита.
Скрипт на PHP, фильтрую с помощью функции eregi();

   
 
 автор: Atheist   (05.04.2008 в 00:02)   письмо автору
 
   для: -Lex-   (04.04.2008 в 20:41)
 

> UTF-8 и в скрипте и от пользователей.
Тогда нужно добавить модификатор "u": /[^A-ZА-Я0-9_,-.!?(): #@;]/u

P.S. Использовать, конечно, нужно функции preg_* (PCRE), а не POSIX, как это делаешь ты. В PHP6 твой код работать не будет.

   
 
 автор: -Lex-   (05.04.2008 в 00:37)   письмо автору
 
   для: Atheist   (05.04.2008 в 00:02)
 

Вот, огромное спасибо, теперь указав А-Я заработало.

Вот когда выпустят PHP6 тогда может и обновлю, а пока так работает, пускай работает.

Сейчас проверил, стали разрешены символы, которых нет в списке...

   
 
 автор: Atheist   (05.04.2008 в 00:45)   письмо автору
 
   для: -Lex-   (05.04.2008 в 00:37)
 

> Сейчас проверил, стали разрешены символы, которых нет в списке

Ты используешь PCRE-функции?

   
 
 автор: -Lex-   (06.04.2008 в 00:39)   письмо автору
 
   для: Atheist   (05.04.2008 в 00:45)
 

Я ведь писал, использую eregi();

   
 
 автор: Atheist   (06.04.2008 в 01:37)   письмо автору
 
   для: -Lex-   (06.04.2008 в 00:39)
 

Я же привёл паттерн под PCRE-функции. Зачем тогда жаловаться, используя его под ereg(i)? Это разные механизмы обработки regexp'ов. Хотя и очень похожие.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования