Выражайся регулярно!

Никита "Nikitos" Кислицин

Xakep, номер #052, стр. 052-080-2


<? If($do=="read") {showpost($pid); showcomments($pid); addcommentform($pid);}?>

Функция addcommentform($pid) создает html-форму для отправки комментария к публикации, в скрытом поле которой параметр $do определяется как "addcomment". Код для этого состояния не заставляет себя долго ждать: <? If($do=="addcomment") {addcomment($aname, $aemail, $comment, $pid);}?>. Все принимаемые функцией параметры получаются из формы, $pid - из ее скрытого поля.

Совсем забыл про строку навигации, выводимую функцией navigation()! Название каждой рубрики представляет собой ссылку, при нажатии на которую пользователю будут показаны публикации по определенной тематике. Параметр do в этом случае имеет значение view, а идентификатор рубрики называется cat. Обработчик этого состояния переменной $do имеет следующий вид: <? If($do=="view") { showposts($cat,,)} ?>. Следует отметить, что в этом случае при вызове функции showposts переопределяется лишь один параметр, значения остальных остаются дефолтными. Все, мы дописали юзерскую часть интерфейса.

Необычные юзеры

Ничего не забыли? Верно, кое-что забыли. Забыли, что среди обычных пользователей встречаются пользователи необычные, любознательные и злонамеренные. Проблема заключается в том, что система наша никак не защищена от их деяний. Самый простой и действенный ключ к решению этой проблемы - отсеивание входных параметров, определяемых либо напрямую, либо косвенно пользователем.

Помни: никогда нельзя доверять пользователю. Если пользователь может что-то сделать, то он обязательно это сделает! Но нет необходимости часами ломать голову над тем, через какие же дыры и каким образом злоумышленник может навредить системе. Куда проще не пускать к обработке данные, имеющие заведомо неверный формат. Так, например, номер статьи может состоять только из цифр, причем их должно быть разумное количество. Для сравнения строк с заданным шаблоном в PHP реализованы функции unix'овых регулярных выражений. Это, надо заметить, чрезвычайно гибкая технология, используемая уже несколько лет. Регулярное выражение является шаблоном, описывающим природу и структуру искомой строки. Функция ereg(regexp, string) возвращает логическое true, если строка string соответствует шаблону regexp. Очевидно, что основной задачей будет составление этого самого шаблона. Он собирается из конкретных символов, диапазонов значений и специальных знаков, накладывающих дополнительные ограничения на структуру строки. Диапазон символов берется в квадратные скобки. Например [a-z] обозначает любую латинскую букву нижнего регистра, а [0-9] эквивалентно любой цифре. Несколько конкретных символов могут перечисляться без всякого разделителя также внутри []. Ставя ^ перед искомой строкой и $ в ее конце, программист указывает, что строка обязательно должна начинаться и заканчиваться указанными символами. Можно также накладывать ограничения на количество указанных знаков, ставя после перечисления символов пару чисел формата {x, y}, определяющих, соответственно, минимальное и максимальное количество знаков в строке.

Назад на стр. 052-080-1  Содержание  Вперед на стр. 052-080-3

Hosted by uCoz