Стоит ли дезинфицировать разметку HTML для размещенной CMS? - PullRequest
4 голосов
/ 07 октября 2008

Я рассчитываю на запуск службы, подобной CMS, для клиентов.

Как бы то ни было, клиенту необходимо будет ввести текст, который будет предоставлен любому, кто посетит его сайт. Я планирую использовать Markdown, возможно, в сочетании с WMD (предварительный просмотр уценки, который использует SO) для больших блоков текста.

Теперь я должен очистить их ввод для html? Учитывая, что лишь немногие люди будут редактировать свои «CMS», все платящие клиенты, я должен вычеркнуть плохой HTML или я просто позволю им взбеситься? Ведь это их «сайт»

Редактировать: Основная причина того, почему я хотел бы сделать это, состоит в том, чтобы позволить им использовать их собственный javascript, и иметь свои собственные CSS и DIVs, а что не для вывода

Ответы [ 5 ]

12 голосов
/ 07 октября 2008

Почему не вы дезинфицируете ввод?

Если вы этого не сделаете, вы приглашаете к бедствию - либо своего клиента, либо себя, либо обоих.

4 голосов
/ 02 июня 2009

Ваш вопрос задает:

"Правка. Основная причина, по которой я хотел бы это сделать, - позволить им использовать свой собственный javascript и иметь свои собственные CSS и div, а также то, что не для вывода".

Если вы разрешите пользователям предоставлять произвольный JavaScript, то очистка ввода не стоит усилий. Определение межсайтового скриптинга (XSS) в основном гласит: «пользователи могут предоставлять JavaScript, а некоторые пользователи плохие».

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

  1. Разместите CMS отдельного пользователя в другом домене. Blogger и Tumblr (например, myblog. blogspot .com против blogger.com) делают это, чтобы шаблоны пользователя не могли украсть файлы cookie других пользователей. Вы должны знать, что вы делаете, и никогда не размещать пользовательский контент в корневом домене.
  2. Если пользовательский контент никогда не передается между пользователями, то не имеет значения, какой скрипт предоставляют злоумышленники. Тем не менее, CMS предназначены для совместного использования, поэтому это, вероятно, здесь не применимо

Существуют некоторые фильтры черного списка, которые могут работать, но они работают только сегодня . Спецификация HTML и браузеры регулярно меняются, что делает фильтры практически невозможными для обслуживания. Чёрный список - верный способ избежать проблем с безопасностью и функциональностью.

При работе с пользовательскими данными всегда относитесь к ним как к ненадежным. Если вы не обратились к этому вопросу в начале продукта, и ваши сценарии изменились, почти невозможно вернуться и найти все точки XSS или изменить продукт, чтобы предотвратить XSS, не расстраивая ваших пользователей.

2 голосов
/ 07 октября 2008

Вы также будете защищать вновь недовольных сотрудников, атаки клиентов и любые другие виды идиотского поведения.

Вы всегда должны дезинфицировать, независимо от пользователей или зрителей.

1 голос
/ 07 октября 2008

Я думаю, что вы всегда должны дезинфицировать вход. Большинство людей используют CMS, потому что они не хотят создавать свой собственный веб-сайт с нуля, и им нужен легкий доступ для редактирования своих страниц. Эти пользователи, скорее всего, не будут пытаться вставить текст, который будет очищен, но, защищая его, вы защищаете их пользователей.

1 голос
/ 07 октября 2008

По крайней мере, синтаксический анализ их записи разрешает только определенное «безопасное» подмножество тегов HTML.

...