Одна вещь, которую вы не должны делать, - это фильтровать входные данные по мере их поступления. Люди часто предлагают это, поскольку это самое простое решение, но оно приводит к проблемам.
Входные данные могут быть отправлены в несколько мест, помимо вывода в виде HTML. Например, он может храниться в базе данных. Правила фильтрации данных, отправляемых в базу данных, сильно отличаются от правил фильтрации выходных данных HTML. Если вы вводите HTML-код на входе, в вашей базе данных будет HTML. (Это также причина, по которой функция PHP "магические кавычки" - плохая идея.)
Вы не можете предвидеть все места, куда будут перемещаться ваши входные данные. Безопасный подход заключается в подготовке данных непосредственно перед отправкой куда-либо . Если вы отправляете его в базу данных, избегайте одинарных кавычек. Если вы выводите HTML, избегайте сущностей HTML. И как только он куда-то отправлен, если вам все еще нужно работать с данными, используйте оригинальную неэкранированную версию.
Это больше работы, но вы можете уменьшить ее с помощью шаблонизаторов или библиотек.