Зачистка вводимых пользователем данных

Аналогичная проблема возникает в связи с любым вводимым пользователями контентом: комментариями в блогах, гостевыми книгами и сообщениями на форумах. В этих случаях нужно также тщательно удалять весь потенциально вредоносный контент. Для этой цели применяются два подхода.
Можно полностью нейтрализовать HTML, литерализовав его, как это было сделано
в упражнении с помощью функции htmlspecialchars (), например, применить
echo htmlspecialchars($guest_book_post_content)
вместо
echo($guest_book_post_content);
Но бывают случаи, когда желательно оставить некоторый диалект HTML-дескрипторов.
Для этого нужно зачистить входные данные, удалив из них только потенциально
вредоносные дескрипторы и аргументы (или, если так легче, разрешив лишь
дескрипторы и атрибуты, которые невозможно использовать во вред).
В некоторых приложениях вместо HTML применяется собственный язык разметки.
Похожая тема была рассмотрена в главе 6, в разделе "Генерация оптимизированного для поиска HTML с помощью собственного языка разметки", но с другой целью— для большей оптимизации НТМЪкода страницы. Однако такой язык можно применять и для зачистки контента. В таком случае нужно выполнить функцию htmlspecialchars () или полностью удалить HTML-дескрипторы, а затем использовать функцию трансляции ограниченного набора собственных дескрипторов наподобие {link} и {/link}, {image}
и {/image}, которые позволяют выполнять лишь определенные действия. Такой подход принят во многих Web-приложениях форумов вроде vBulletin и phpBB. И, действительно, в отдельных приложениях, где пользователи постоянно общаются между собой и не против освоить специальные обозначения для разметки, это имеет смысл. Но в таких случаях, как комментарии или гостевые книги, язык HTML является общим знаменателем, известным большинству пользователей, и удобнее разрешить ограниченный диалект этого языка. Это решение и будет рассмотрено здесь.
Как обычно, чтобы не загромождать код, функции зачистки HTML будут вынесены
в отдельный файл. Выполните следующее небольшое упражнение, где вы создадите и используете эту новую небольшую библиотеку. Затем будет выполнено обсуждение кода.