Журнал WEB Star на Коврике Реклама
Программа для каталогизации ваших off-лайн журналов - FondJournal
Реклама
WEB Star - menu      :: Главная :: WEB design :: WEB фокусы :: Programming :: ФотоSHOPия :: BONUS :: Юмор ::
Programming
*** WEB Star #6*** :: Programming ::
Посетить КоврикОтправить мыло
Фильтруй базар
Логика чистки информации на PHP
Полоса новостей с использованием js и слоев
Создание системы учета посещений

Логика чистки информации на PHP

Автор: Алекс aka TrigGer
Источник: Коврик TrigGer'a

Рано или поздно перед начинающим программистом встает вопрос о том, как же все-таки произвести чистку ненужных элементов, которые иногда появляются в тексте, передаваемом пользователем через web-формы, например, при заполнении формы для гостевой книги. Это своеобразный фильтр на различные опасные символы, которые могут не только испортить внешний вид вашего web-приложения, но и привести к необратимым последствиям, таким, как поломка вашего скрипта такими людьми, которых называют "типа хакер".

Данный материал практически нигде нельзя встретить в Сети, так как его не очень много и конкретики маловато (по крайней мере, я такого материала, который бы объяснял, как почистить информацию, пришедшую от пользователя, не встречал). Данный алгоритм я специально вычленил из своего опыта и из посещений форумов, где обсуждался этот вопрос, так что можно сказать, что данная статья не только дело моих рук, но и других тоже. Но хватит лирических отступлений пора приступить к делу.

Сначала нужно сформулировать задачу, к которой мы будем применять данный алгоритм. Для примера возьмем небольшую форму, состоящую из двух полей - это поле для ввода имени (назовем его name) и поле для ввода комментариев, например, для какой-нибудь статьи (назовем его comment). С задачей определились, теперь осталось обозначить символы, которые потенциально опасны для нашей web-странички. Если мы будем записывать всю полученную информацию от пользователя в отдельный файл, а потом этот файл вставлять в одну из наших страниц, предварительно не почистив эту информации, то может произойти не обратимое, а так как нам лень лишний раз лезть в этот файл и чистить там своими руками, то предоставим это дело скрипту.

Сначала я приведу саму логику, а потом подробно раскомментирую каждую строку.
Приступим.

$name=substr($name,0,22);
$name=str_replace(" ","",$name);
$name=htmlspecialchars($name);
$name=str_replace("<","",$name);
$name=str_replace(">","",$name);
$name=str_replace("&lt;","",$name);
$name=str_replace("&gt;","",$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("&lt;","",$comment);
$comment=str_replace("&gt;","",$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-тэги, которые пользователь ввел, но не убирает их совсем, а заменяет:

& преобразует в &amp; в самом тексте будет выглядеть, как &, а внутри документа - &amp;
"" преобразует в &quot;
< преобразует в &lt;
> преобразует в &gt;

Таким образом, мы обезвредим потенциально опасные html-тэги, которые могут повредить нашему документу. Если мы это не сделаем, то пользователь не пойдет нам на встречу и не будет благоразумным и может вставить, в самом лучшем случае - картинку, в самом худшем - звук, который или испортит внешний вид нашей странички или сделает так, что она будет долго грузиться, а это нам надо?
После выше сказанного вы сами должны разобраться. Хочу только добавить, что я всегда обрезаю знаки: < > Это делается затем, чтобы, если пользователь все-таки решил побаловаться и написал <b>Миша</b>, то данный алгоритм выведет у нас bМиша/b - это нам сразу дает понять, что кто-то все-таки решил побаловаться. Конечно, мы не можем фильтровать каждую букву, что может привести к плачевным результатам, так что лучше с этим не экспериментируйте.

Хочу еще добавить, что знаки: \r и \n лучше всегда обрезать, если вы используете файлы, куда записываете информацию, так \r - это возврат каретки на предыдущую строку, то есть, если вы, например, написали в алгоритме записи в файл так ….\n, то у вас курсор встанет на следующую строку и таким образом вам будет легче заносить этот файл в массив, но если пользователь поставит все-таки знак \r, то это вернет курсор на строку вверх и после этого, если туда добавить еще какую-нибудь запись, то это приведет к плачевным результатам и файл в массив считать уже будет проблематично. Как вы уже поняли знак \n означает перевод каретки (курсора) на следующую строку, что часть практикуется. Все эти знаки лучше обрезать - поверьте так лучше.

И напоследок - удачи вам в изучении PHP :)

Копирайты
     Перепечатка материалов разрешается, только после письменного разрешения автора (e-mail). При перепечатке любого материала с журнала видимая ссылка на источник www.kovrik.hut.ru и все имена, ссылки авторов обязательны.
Notes
   © Copyright Алекс aka TrigGer & x-graphic studio.
   © Все права защищены.
   Для просмотра журнала рекомендуеться:
Разрешение: 1024*768 точек
Браузер: Internet Explorer 5.5 или выше
Для более эффективного просмотра нажмите F11.