PHP-BugZ ManderX Спецвыпуск Xakep, номер #030, стр. 030-020-2 Вот кстати посмотри рубрику Типс нашего сайта, там был хороший пример, как в поля e-mail и homepage можно было написать кое-что интересное=). Догадайся какие символы надо фильтровать?=) Если же ты любитель регулярных выражение, то держи парочку примеров (а лучше сам разберись, тогда и научишься вырезать из строки то, что тебе надо, это не главная тема статьи). Запретим пользователю использовать в своем нике любые символы, кроме букв русского и латинского алфавита, знака "_" (подчерк), пробела и цифр: if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$username)) { echo "Я те хакну!"; exit; } Для поля ввода адреса e-mail добавим в список разрешенных символов знаки "@" и ".", но уберем русские буквы и пробел: if (preg_match("/[^(\w)|(\@)|(\.)]/",$mail)) { echo "Я те хакну!"; exit; } 2.2. Ограничить поля ввода имени, ника и т.д. Добавив параметр maxlength в html-тэг, вот пример: <input type=text name=nick maxlength=10> А если злобный хацкер решил сохранить твою форму у себя на винте, и уже на винте убрать maxlength=10, то поставь в начала страницы проверку на REFERER: <? $referer=getenv("HTTP_REFERER"); if (!ereg("^http://www.страница_с_которой_нужно_было_зайти_сюды.com")) { echo "Я те хакну!"; # или можешь написать - “Header("Location: index.php");” – эта строка отсылает юзера на главную пагу. exit; } ?> Теперь если он попытается послать данные с паги, находящийся на своем винте, то мы его красиво посылаем. Вообще такие проверки рисую на каждой страницы, пусть маленькая, но защита. 80% хацкеров остановятся, но другие-то знают, что и проверка на реферер не трабла, ибо сам реферер формируется браузером, т.е. на стороне клиента. Поэтому, получи данные от пользователя, мы всетаки отрежем все, что стоит после 10-ого символ переменной: $username=substr($nick,0,10); Еще в некоторых готовых скриптах вижу такое, что например в index.php пишут: $PHP_SELF = "main.php"; Далее инклюдят, к примеру, engine.php и в engine.php идет проверка на $PHP_SELF: if (eregi("engine.php",$PHP_SELF)) { Header("Location: index.php"); die(); } Т.е. мы в index.php устанавливаем $PHP_SELF, как main.php, и наш скрипт engine.php должен быть обязательно проинклюден. Если же пользователь наберет в URL engine.php то его пошлю на index.php, так как $PHP_SELF (это переменная окружения) равняется engine.php, а если этот скрипт будет проинклюден в главном файле, то никто никого не пошлет, т.к. $PHP_SELF будет равна main.php=). 3. Данные так же могут быть использованы в других сферах, например в SQL-запросе, но для всего это есть общее правило: фильтровать символ конца строки. Для фильтрации данных, которые будут участвовать в SQL-запросе можешь воспользоваться функцией mysql_escape_string. Почитай статьи по SQL-Injection для большего ознакомления, их сейчас очень много! Примечание: когда тип входящего параметра известен, то можно проверить еще и на тип переменной. |