![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| DezmASter |
|
||||||||
![]() Дизайнер :) ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1520 Регистрация: 3.2.2006 Где: Украина, Запорожь е Репутация: 1 Всего: 109 |
Каждый web-мастер должен уметь не только писать скрипты, но и грамотно организовывать защиту своих творений. Одним из важнейших навыков является умение правильно фильтровать всю информацию, поступающую от пользователя. Об этом и пойдет речь в моей статье.
Прежде всего, следует фильтровать данные, которые передает пользователь осознанно - в основном, это данные различных форм. Это может быть пара логин-пароль для входа, пункт голосования и т.п. Например, такая форма
После нажатия кнопки "OK" передаст скрипту index.php два значения - $login и $pass. Как их можно отфильтровать? Пример для переменной $login:
В первой строке мы проверяем существование переменной $login, если она существует - идем дальше, если нет - выводим сообщение об ошибке. Затем с помощью функции htmlspecialchars заменяем в этой переменной спецсимволы на их HTML мнемоники. То есть знак `<` меняется на `<`, `&` меняется на `&` и т.д. Функция stripslashes вырезает знак обратного слеша `\`. Далее с помощью str_replace вырезаем знак прямого слеша, точку (иногда бывает полезно) и обратную кавычку. Если вы знакомы с регулярными выражениями, то предыдущий пример можно записать гораздо короче:
Этот фрагмент кода будет проверять введенный логин на соответствие регулярному выражению `/[0-9a-z_]/i`, которое означает: все цифры + все латинские буквы в любом регистре + знак подчеркивания. Если логин содержит другие символы, то будет показано сообщение об ошибке. Аналогично фильтруются переменные, получаемые скриптом через URL. В движках сайтов можно встретить что-то вроде таких ссылок: http://www.site.com/index.php?module=news Если не фильтровать переменную $module (или $_GET[`module`], если register_globals отключен), то над сайтом могут вытворяться не очень хорошие вещи, вроде XSS. Нужно применять первый приведенный мной скрипт-чистильщик, разумеется, убрав сообщения об ошибках. Следующее, на чем бы я хотел остановиться - это фильтрация кукисов. Думаю, что даже если вы начинающий программист, то с "плюшками" вы сталкивались, а насчет их проверки даже не задумывались. Зря! Если вы используете SQL-базы данных, то отсутствие проверки кукисов может привести к использованию хакерами SQL-injection. Так как в кукисах, в основном, мы используем определенный тип данных, например, только числа, то проверку данных можно проводить с помощью все тех же регулярных выражений. Допустим, у нас есть кукис "id", в котором хранятся числовые данные. Его проверка:
В сети есть огромное количество документации посвященной взлому сайтов,в частности, там показаны различные случаи использования XSS и приемы обхода фильтрации. Но мы то с вами уже умеем защищаться от непрошенных гостей ;) Автор: Ткаченко Ярослав Сайт автора: http://wcode.ru/ |
||||||||
|
|||||||||
| alloha |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.9.2007 Репутация: нет Всего: нет |
Существует скрипт, который выводит данные из БД (postgresql) в табличку. Необходимо к этому скрипту прикрутить механизм фильтрации по датам (месяц-год). Порывшись в доках я набросал запрос к бд, который как раз и делает необходимую мне работу, только вот отображает он только дату, а остальные данные нет. Похожий механизм я видел на одной из страничек нашего внутреннего сайта, там все работает. Я пытался по аналогии сделать тоже самое с моим скриптом но эффект тотже (выводится только дата). Подскажите в чем может быть проблема. Если не затруднить обрисуйте пожалуйста сам механизм фильтрации подобных данных.
С уважением, AllohA! |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |