Как правильно фильтровать данные, полученные от пользователя на PHP

Главная Создать свой сайт и продвинуть его Создание сайтов Как правильно фильтровать данные, полученные от пользователя на PHP
1 ответ(ов) в теме
Master-It
не в сети давно
На сайте с 23.07.2012
Участник
0
17:08

При написании веб приложений, первое на что нужно обращать внимание так это безопасность:)
А именно насколько корректно обрабатываются данные вводимые юзером в форму для отправки сообщений, ну или в поле имя, email.
Некорректно отрабатываемые данные полученные от пользователя могут быть чреваты широким спектром уязвимостей от XSS до SQL инъекций.
Как в ПХП можно отфильтровать данные?
Есть в PHP такая функция, как htmispeciaichars()
Именно эта функция предназначена для защиты от передачи HTML-тегов.
В качестве параметров ей нужно передать строку, а на выходе получается та же строка, в которой символы < и > заменены на последовательности &it; и &gt.
Ну, что-то типа:
$user=htmlspecialchars($UserName);
Но возможности данной функции ограниченны тем, что она может только заменить html теги, не более того.
А как же все остальное?
А вот для всего остального, и существуют регулярные выражения с помощью которых бы и будем писать функцию.
Мне больше всего нравится функция регулярных выражений Perl preg_replace()
Функцию же будем составлять по принципу Запрещено все, что не разрешено!
<br><?php<br> function check_param($var)<br> {<br> $var=preg_replace("/[^a-zа-я0-9., _n]/i", "", $var);<br> return $var;<br> }<br>?><br>
В данном случае мы будем заменять абсолютно все символы кроме a-zа-я0-9., _n на пустую строку ""
Для примера создадим форму для ввода сообщений, с двумя параметрами имя и текст сообщения:
<br><?php<br> function check_param($var)<br> {<br> $var=preg_replace("/[^a-zа-я0-9., _n]/i", "", $var);<br> return $var;<br> }<br><br> $comment=$_POST[coxt];<br> $user=$_POST[username];<br> $_POST[coxt]='';<br> // $user=check_param($user);<br> // $comment=check_param($comment);<br><br> print ("$user <br /> $comment");<br><br>?><br> <form name="product" action="messa.php" method="post"><br> <tr><br> <td > <p><font color=#D70000> * </font> Имя Пользователя:</p> </td><br> <td><input name="username" value="" maxlength="22"></td><br> </tr><br> <tr><br /><br> <td ><p><font color=#D70000> * </font> Текст сообщения:</p> </td><br> <td><textarea cols="56" name="coxt" rows="10" wrap="virtual"><br> <?php $_POST[coxt]=''; ?></textarea></td><br> </tr><br> <p><input type="submit" value="Отправить" style="width:110px;" /></p><br> </form><br>
Теперь можно проверить на сколько корректно скрипт обрабатывает данные вводимые пользователем.
Для этого достаточно в поле имя пользователя или текст сообщения ввести:
<br><script>alert('aLerT_XSS')</script><br>
Естественно мы увидим окно сообщения! А это значит, что в скрипт можно ввести JavaScript со всеми вытикающими)
Поэтому теперь раскомментируем эти строки (удалим слеши):
<br><?php<br> // $user=check_param($user);<br> // $comment=check_param($comment);<br>?><br>
И оценим работу нашей функции check_param
Законченный вариант работы функции Вы можете посмотреть и оценить здесь: http://www.bestcatalog.hut4.ru/php.php

Редакции сообщения
0

Ваше имя *

Ваш E-mail *

не публикуется

Текст сообщения *