Логика чистки информации на PHP. Обезвреживание
данных в формах.
Автор: неизвестен
Редактор: Кирилл Шагин
Рано или поздно перед начинающим программистом встает вопрос о том, как же все-таки произвести чистку ненужных элементов, которые иногда появляются в тексте, передаваемом пользователем через web-формы, например, при заполнении формы для гостевой книги. Это своеобразный фильтр на различные опасные символы, которые могут не только испортить внешний вид вашего web-приложения, но и привести к необратимым последствиям, таким, как поломка вашего скрипта такими людьми, которых называют "типа хакер".
Приступим.
$name=substr($name,0,22); $name=str_replace(" ","",$name); $name=htmlspecialchars($name); $name=str_replace("<","",$name); $name=str_replace(">","",$name); $name=str_replace("<","",$name); $name=str_replace(">","",$name); $name=str_replace("\r","",$name); $name=str_replace("\n"."",$name);
$comment=substr($comment,0,500); $comment=htmlspecialchars($comment); $comment=str_replace("<","",$comment); $comment=str_replace(">","",$comment); $comment=str_replace("<","",$comment); $comment=str_replace(">","",$comment); $comment=str_replace("\r","",$comment); $comment=str_replace("\n","",$comment);
Вышеприведенный код чистит поступившую информацию от пользователя, а потом, когда зачистка произведена, записывает ее в файл и таким образом нам нечего опасаться. А теперь разберем каждую строчку в отдельности.
$name=substr($name,0,22); - данная строка предназначена для того, чтобы обрезать
слишком длинное имя. То есть функция substr возвращает 22 символа из введенной
строки в поле имя. Такой длинны пользователю должно хватить,
чтобы написать свое имя, но можно и увеличить количество символов. Состав функции
- $name - нам говорит из какой переменной надо возвращать 22 символа. 0 - это
начало отсчета. 22 - конец, то есть до куда должна быть возвращена строка. Таким
образом, данная функции, в просторечье, обрезает длину любой информации, сохраненной
в той или иной переменной (в данном случае в переменной name).
$name=str_replace(" ","",$name);
Что можно сказать о данной строке? Увидев такую строку, программист сразу понимает,
что данная функция обрезает все пробелы из строки, переданной в переменной.
" " - означает в строке пробел, а "" - это у нас чем этот
пробел заменяется, то есть пробел заменяется ничем. Рассмотрим пример: пользователь
ввел свое имя, допустим, Саша Петров, после обработки этой строки она будет
выглядеть вот так "СашаПетров". Как видите это не очень удобно, так
что применяйте эту строку с умом.
$name=htmlspecialchars($name);
Что это такое? Функция htmlspecialchars обезвреживает html-тэги, которые пользователь
ввел, но не убирает их совсем, а
заменяет: преобразует в в самом тексте будет выглядеть, как , а внутри документа
- "" преобразует в " < преобразует в <
> преобразует в >. Таким образом, мы обезвредим потенциально опасные html-тэги,
которые могут повредить нашему
документу. Если мы это не сделаем, то пользователь не пойдет нам на встречу
и не будет благоразумным и может вставить, в самом лучшем случае - картинку,
в самом худшем - звук, который или испортит внешний вид нашей
странички или сделает так, что она будет долго грузиться, а это нам надо?
После выше сказанного вы сами должны разобраться. Хочу только добавить, что
я всегда обрезаю знаки: < > Это делается затем, чтобы, если пользователь
все-таки решил побаловаться и написал <b>Миша</b>, то данный
алгоритм выведет у нас bМиша/b - это нам сразу дает понять, что кто-то все-таки
решил побаловаться. Конечно, мы не
можем фильтровать каждую букву, что может привести к плачевным результатам,
так что лучше с этим не экспериментируйте.
Хочу еще добавить, что знаки: \r и \n лучше всегда обрезать, если вы используете
файлы, куда записываете информацию, так \r - это возврат каретки на предыдущую
строку, то есть, если вы, например, написали в алгоритме записи в файл так .\n,
то у вас курсор встанет на следующую строку и таким образом вам будет легче
заносить этот файл в массив, но если пользователь поставит все-таки знак \r,
то это вернет курсор на строку вверх и после этого, если
туда добавить еще какую-нибудь запись, то это приведет к плачевным результатам
и файл в массив считать уже будет
проблематично. Как вы уже поняли знак \n означает перевод каретки (курсора)
на следующую строку, что часть практикуется. Все эти знаки лучше обрезать -
поверьте так лучше.
И напоследок - удачи вам в изучении PHP :)