Пользователи, вводящие символы амперсанда и персонажа, портят мои сайты проверкой w3c - PullRequest
0 голосов
/ 24 октября 2009

моя социальная сеть работает в формате w3c xhtml, однако пользователи могут публиковать отчеты и прочее в блогах, а иногда вводить символы амперсанда, которые, в свою очередь, портят мою проверку. Как я могу это исправить, и есть ли другие отдельные символы, которые мне нужно искать, которые могут испортить мою проверку?

Ответы [ 3 ]

8 голосов
/ 24 октября 2009

При отображении контента, созданного пользователем, запустите его через функцию htmlspecialchars () .

2 голосов
/ 26 октября 2009

Плохая идея разрешать пользователям вводить HTML-разметку.

Это допускает все виды неприятных вещей, в частности, использование межсайтовых скриптов (XSS) и внедрение скрытого спама (скрытого от вас, а не от роботов поисковых систем).

Вы должны:

  • Уничтожьте все HTML-теги, используя htmlspecialchars(), и сохраняйте только новые строки с nl2br(). Вы можете разрешить некоторое форматирование, внедрив собственную безопасную разметку, которая допускает только очень специфические теги (такие как phpBB или Wiki-подобная разметка).

  • Используйте HTML Purifier , чтобы надежно устранить всю потенциально опасную разметку. Функция PHP strip_tags() в корне нарушена и допускает опасный код в атрибутах, если вы используете аргумент белого списка.

2 голосов
/ 24 октября 2009

По общему принципу ошибочно включать пользовательский (или вообще любой внешний) контент на вашу страницу напрямую без проверки или фильтрации. Помимо возникновения ошибок валидации, это также может привести к «сломанным страницам» и большим дырам в безопасности (межсайтовые скриптовые атаки).

Всякий раз, когда вы получаете данные из в любом месте , которым не доверяют на 100%, вам необходимо каким-то образом обеспечить их безопасность. Вы можете сделать это, выполнив некоторые или все из:

  1. Экранирование текстовых данных, так что специальные символы заменяются представляющими их сущностями HTML.
  2. Удаление или фильтрация небезопасных тегов HTML.
  3. Проверка того, что HTML не содержит небезопасных или незаконных конструкций.

Если ваш пользовательский ввод должен интерпретироваться как текст, то вы в основном смотрите на вариант 1; если вы позволяете пользователям использовать HTML, тогда вы смотрите на варианты 2 и 3. Четвертый вариант - это заставить пользователей использовать более ограничительную не HTML-разметку, такую ​​как Markdown или bbCode, переводя эту разметку в HTML с библиотека, которая (надеюсь) не позволяет внедрять дыры в безопасности, конструкции разрыва страниц или другие страшные вещи.

...