Что делает HTML Purifier, чего не может безопасное программирование на PHP? - PullRequest
20 голосов
/ 25 января 2012

Я изучаю рекомендации по безопасности PHP и, в частности, библиотеку HTML Purifier .

Мне нравится идея использовать стороннюю библиотеку для повышения безопасности моих сайтов, но меня смущают некоторые вещи ...

  1. Во-первых, общий вопрос ... Что делает очиститель HTML, чего не может практиковать безопасное программирование на PHP?

  2. Если я использую HTML Purifier, означает ли это, что я могу пропустить общие меры безопасности, такие как использование функций PHP для фильтрации ввода и экранирования вывода?

  3. Один из комментариев к ответу на этот вопрос , по-видимому, предполагает, что очиститель HTML необходим только для элементов, допускающих теги HTML, таких как редакторы WYSIWYG. Это правильно?

  4. Кто-нибудь замечал отставание в производительности от использования HTML Purifier? Эта статья создает впечатление, что влияние на производительность стоит учитывать.

  5. Существуют ли современные учебные пособия по интеграции HTML Purifier с некаркасным приложением PHP? Все, что я нашел, это старый или специфичный для фреймворка .

Просто чтобы подтвердить, что я сделал домашнее задание, прежде чем спросить ...

  • Этот вопрос по сути такой же, как у меня, но одинокий ответ, кажется, просто перечисляет еще одну лучшую практику, о которой спрашивающий забыл упомянуть

  • Этот «обильный» вопрос является потрясающим ресурсом о HTML Purifier и HTML5, но предполагает фундаментальные знания

  • Эта страница сравнения на сайте HTML Purifier - это скорее сравнение с другими фильтрами

1 Ответ

23 голосов
/ 25 января 2012

Принимая любые входные данные от ваших пользователей, возможны две крайности:

  1. Беспорядочно экранировать все в HTML-сущности, поэтому пользователь ничего не может внедрить. Это на 100% безопасно, но не дает пользователю никакой свободы добавлять любой HTML, например, для полужирного текста и т. П.
  2. Вывести содержимое, как вы получили его от пользователя. Это позволяет пользователю полужирный текст , а также вводить сценарии или связываться с вашим HTML в любой другой форме, которую пользователь желает, преднамеренно или непреднамеренно.

HTML Purifier обеспечивает золотую середину: позволяет пользователю вводить некоторый HTML, но не вредоносный HTML. Это, конечно, грязная вещь, но HTML Purifier - одна из немногих библиотек, если не единственная, которая делает это правильно.

Это единственное, для чего он должен использоваться. Не отказывайтесь от других мер безопасности. Фактически, я бы полностью избежал этой проблемы, позволив пользователям использовать только стилизованный язык разметки для стилизации своего ввода, например Markdown (который использует Stackoverflow).

...