Скидка с цены и XSS

Поскольку это - допустимый XML. Это помогает много, так как можно использовать много инструментов, первоначально разработанных для XML, таких как синтаксические анализаторы XML, XSLT, XPath, XQuery...

Нормальный HTML является диалектом SGML, и это не parsable без ведома схемы.

  • one
  • two
  • three

корректный HTML , но не корректный XML. Если Вы хотите проанализировать это, необходимо знать, что ul - элементы должны быть закрыты, но li с не делают.

11
задан psb 6 November 2009 в 21:30
поделиться

2 ответа

Есть две проблемы с тем, что вы предложили:

  1. Я не вижу способа, чтобы ваши пользователи могли форматировать сообщения. Например, вы использовали Markdown для создания хорошо пронумерованных списков. В предлагаемом мире без тегов-без-исключений я не понимаю, как конечный пользователь сможет сделать такое.
  2. Намного важнее: При использовании Markdown в качестве «родного» языка форматирования , и добавляя в белый список другие доступные теги, вы ограничиваете не только входную часть мира, но и выходную. Другими словами, если ваш дисплейный движок ожидает Markdown и разрешает выводить только контент из белого списка, даже если (не дай Бог) кто-то доберется до базы данных и внедрит какой-то неприятный код, загруженный вредоносным ПО, в кучу сообщений, сам сайт и его пользователи защищены, потому что вы также дезинфицируете его при отображении.

В сети есть несколько хороших ресурсов о дезинфекции вывода:

6
ответ дан 3 December 2019 в 01:44
поделиться

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

*: Это дизайнерское решение, с которым я совершенно не согласен, и один, который, я думаю, не оказался полезным в SO, но он является дизайнерским решением, а не ошибкой.

Кстати, шаг 3 должен быть «вывод на страницу»; обычно это происходит на этапе вывода, когда база данных содержит необработанный отправленный текст.

4
ответ дан 3 December 2019 в 01:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: