Первое: htmlentities
или просто htmlspecialchars
должны использоваться для экранирования строк, встроенных в HTML. Вы не должны использовать его для экранирования строки при вставке их в запрос SQL - используйте mysql_real_escape_string
(для MySql) или еще лучше - используйте подготовленные операторы , которые имеют связанные параметры , Убедитесь, что magic_quotes
выключены или отключены, если вы вручную экранируете строки.
Второе: вы не убираете струны, когда снова их извлекаете. Например. нет mysql_real_unescape_string
. И вам также не следует использовать stripslashes
- если вы обнаружите, что вам нужно, то, возможно, у вас включены magic_quotes - вместо этого отключите их и исправьте данные в базе данных, прежде чем продолжить.
В-третьих: то, что вы делаете с html_entity_decode
, полностью аннулирует предполагаемое использование htmlentities
. Прямо сейчас у вас нет абсолютно никакой защиты от злонамеренного пользователя, внедряющего код в ваш сайт (вы уязвимы для межсайтовых сценариев или XSS). Строки, которые вы встраиваете в контекст HTML, должны быть экранированы с помощью htmlspecialchars
(или htmlentities
). Если у вас есть для встраивания HTML-кода в вашу страницу, вам сначала нужно пропустить его через чистящее средство. strip_tags
делает это - в теории - но на практике это очень неадекватно. Лучшее решение, о котором я знаю, это HtmlPurifier . Однако, что бы вы ни делали, всегда есть риск, что случайный пользователь сможет вставить код на ваш сайт. Если это вообще возможно, попытайтесь спроектировать свое приложение так, чтобы оно не требовалось.