Maximusart
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ну так я ж так, уважительно, просьба без всяких обид... Ну так вот, сегодня и занимался маном по поводу проверки вводимых пользователем данных. Вот что нарыл полезного: Заменил в system\query.php Код: $_GET['q'] = ereg_replace('([^ +_A-Za-z_-Яа-__'0-9-])', '', $_GET['q']); | На: Код: #буквы алфавитов static $re_letters = array( #английский + турецкие буквы (татарский латиница) 'tr' => '[a-zA-Z]|\xc3[\xa4\xa7\xb1\xb6\xbc\x84\x87\x91\x96\x9c]|\xc4[\x9f\xb1\x9e\xb0]|\xc5[\x9f\x9e]', #(all) 'tr_uc' => '[A-Z]|\xc3[\x84\x87\x91\x96\x9c]|\xc4[\x9e\xb0]|\xc5\x9e', #(uppercase) 'tr_lc' => '[a-z]|\xc3[\xa4\xa7\xb1\xb6\xbc]|\xc4[\x9f\xb1]|\xc5\x9f', #(lowercase) #русский + татарские буквы (кириллица) 'tt' => '\xd0[\x90-\xbf\x81]|\xd1[\x80-\x8f\x91] #А-я (all) |\xd2[\x96\x97\xa2\xa3\xae\xaf\xba\xbb]|\xd3[\x98\x99\xa8\xa9]', #татарские буквы (all) 'tt_uc' => '\xd0[\x90-\xaf\x81] #А-Я (uppercase) |\xd2[\x96\xa2\xae\xba]|\xd3[\x98\xa8]', #татарские буквы (uppercase) 'tt_lc' => '\xd0[\xb0-\xbf]|\xd1[\x80-\x8f\x91] #а-я (lowercase) |\xd2[\x97\xa3\xaf\xbb]|\xd3[\x99\xa9]', #татарские буквы (lowercase) ); #заменяем недопустимые символы из таблицы ASCII на пробел (за исключением " ", "|", "*") $q = preg_replace('/(?![\x20\x7c\x2a])[\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]/s', ' ', $_GET['q']); $trans = array( "\xc2\xad" => '', #вырезаем "мягкие" переносы строк (­) "\xcc\x81" => '', #знак ударения (U+0301 <combining acute accent>) "\xc2\xa0" => ' ', #неразрывный пробел ); $q = str_replace(array_keys($trans), array_values($trans), trim($_GET['q'], ' |')); #проверка синтаксиса поискового запроса: if (! preg_match('/^(???>' . $re_letters['tr'] . ')+ #слова английские или турецкие | (?>' . $re_letters['tt'] . ')+ #слова русские или татарские | \d+ )(?>\*?\x20)? \x20*(?>\|\x20*)? )+ $/sx', $_GET['q'] . ' ')) { #неверный поисковый запрос $EOUT = msg("Заголовок (к примеру Ошибка запроса)", "подзаголовок (что возможно вызвало)", str_replace("__URL__", "index.php", $lang['redirect']), "index.php"); $NOOUT = 1; } | Проверяет на русские, латинские символы, включая всякие хитрые у короткие и там всяческие экзотические символы. Ничего лишнего, при входе "Левого" параметра поиска делаю редирект на главную, с выводом из файла переменных lang\users\ru.php В общем, думаю прикрутить такие же запросы и к другим переменным, подверженным мускуль инъекциям. | Всего записей: 330 | Зарегистр. 27-10-2003 | Отправлено: 20:58 26-12-2007 | Исправлено: Maximusart, 09:33 27-12-2007 |
|