Что нужно кроме полос <script>, чтобы убедиться, что введенный пользователем HTML безопасен? - PullRequest
2 голосов
/ 24 января 2009

У меня есть приложение, которое обрабатывает HTML, чтобы сделать хорошую типографику. Теперь я хочу разместить его в Интернете, чтобы пользователи могли вводить свой текст. Итак, вот вопрос: я почти уверен, что хочу удалить тег SCRIPT, а также закрывающие теги, такие как . Но что еще я должен удалить, чтобы сделать его полностью безопасным?

Ответы [ 7 ]

17 голосов
/ 24 января 2009

О, Господи, ты облажался. Взгляните на

По сути, есть так много вещей, которые вы хотите вырезать. Плюс, есть вещи, которые действительны, но могут быть использованы злонамеренно. Что если пользователь хочет установить меньший размер шрифта в сноске? Вас волнует, будет ли это применяться ко всей вашей странице? Как насчет настройки цветов? Теперь все слова на вашей странице - белые на белом фоне.

Я бы снова посмотрел этап требований.

  • Возможна ли альтернатива уценке?
  • Можете ли вы ограничить доступ к конечному контенту, уменьшив риск воздействия? (имеется в виду, можете ли вы настроить его так, чтобы пользователь только сам себя шутил и не мог причинить вред другим людям?)
5 голосов
/ 24 января 2009

Вы должны использовать белый список, а не черный список: решите, какие функции желательны, а не пытайтесь заблокировать любую нежелательную функцию.

Составьте список желаемых типографских функций, которые соответствуют вашему приложению. Обратите внимание, что, вероятно, не существует единого списка для всех: он зависит как от характера сайта (вопросы программирования? Блог подростков?), Так и от характера текстового поля (оставляете ли вы комментарий или пишете статью) ?). Вы можете взглянуть на некоторые полезные и полезные текстовые поля в открытом коде CMS s.

Теперь вам нужно выбрать между вашим собственным языком разметки и HTML. Я бы выбрал язык разметки. Плюсы - лучшая безопасность, минусы - невозможность добавить неожиданное интернет-содержимое, например видео на YouTube. Хорошей идеей для предотвращения ярости пользователей является добавление функции «HTML на мой сайт», которая переводит соответствующие теги HTML на язык разметки и удаляет все остальные теги.

Плюсы для HTML - это соответствие стандартам, возможность расширения до новых типов контента и простота. Большой минус - проблемы безопасности внедрения кода. Если вы выберете HTML-теги, попробуйте использовать некоторую рабочую систему для фильтрации HTML (я думаю, что Drupal в этом случае неплохо справляется).

3 голосов
/ 24 января 2009

Вместо внесения в черный список некоторых тегов, всегда безопаснее белый список. Посмотрите, что делает переполнение стека: Какие теги HTML разрешены при переполнении стека?

Существует слишком много способов встроить сценарии в разметку. JavaScript: URL-адреса (закодированы, конечно)? CSS поведения? Я не думаю, что вы хотите пойти туда.

1 голос
/ 24 января 2009
  • <iframe>
  • <style>
  • <form>
  • <object>
  • <embed>
  • <bgsound>

Это то, о чем я могу думать. Но чтобы быть уверенным, используйте вместо этого белый список - такие вещи, как <a>, <img> & dagger; которые (в основном) безвредны.

& крестик; Просто убедитесь, что любые javascript:... / on*=... тоже отфильтрованы ... как видите, это может быть довольно сложно.

1 голос
/ 24 января 2009

Существует множество способов проникновения кода, особенно в ситуации, когда image может передать тег вашим клиентам. Я видел блокировку на сайтах ранее, но тег получил право через 30-40 паролей.

0 голосов
/ 15 октября 2009

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

Но MediaWiki успешно удаляет опасные активные сценарии из CSS (т. Е. Поведение, обработчики onEvent, активные фильтры или цели ссылок javascript) без полной фильтрации атрибута стиля и запрещает несколько других активных элементов, таких как object, embed, BGSOUND.

Обе сидения также запрещают шатры (не стандартный HTML и бесполезно отвлекающий).

Но сайты MediaWiki патрулируются многими пользователями, и существуют правила политики, запрещающие частым злоупотреблениям пользователей.

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

0 голосов
/ 24 января 2009

Я не согласен с человеко-б . Вы забываете об атрибутах JavaScript, например:

<img src="xyz.jpg" onload="javascript:alert('evil');"/>

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

...