Мне нужно отобразить содержимое строки (на котором я не контролирую) на веб-странице. Все должно отображаться как за исключением определенного ограниченного количества тегов HTML (strong, em, p, br). Это должно быть честью, и я понимаю, что ее безопасность не оставляет их незатронутыми. Все остальное должно отображаться как есть.Выборочное кодирование HTML (все, кроме определенных тегов) в .NET?
Удивительно, что большинство HTML Sanitizers действительно навязчивы в том смысле, что они направлены на устранение того, что они считают «небезопасным». Почему это? Почему они не отказываются от удаления вместо удаления? Должен ли я зарезервировать для хака вдоль линий
var encoded = System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode("string content");
var encodedWithSafeTagsReenabled = encoded.Replace("<strong>", "<strong>");
Есть ли чище и более надежный способ сделать это в .NET экосистема в 2016 году? Опять же, почитайте белый список тегов и сохраните (закодируйте, а не удалите) все остальное?
* Чтобы уточнить, это будет использоваться для размещения контента в конкретном div на веб-странице (я знаю, что кодировка должна зависящей от контекста на основе обманутого листа OWASP XSS).
Большинство HTML дезинфицирующие полагаться на самом деле построения модели документа и работать с узлами, а не пытаться искажать строка. В результате недействительный HTML либо должен быть удален, либо иначе «исправлен», либо создание модели документа не удастся. –
Спасибо, понял. Они создают DOM или что-то еще, но мой вопрос в том, почему они не дефолт кодирования при сбрасывании на строку в конце? Почему они должны быть навязчивыми и удалять? Что делать, если содержимое не является допустимым DOM? Я прошу их дезинформировать произвольную строку для вывода html (не проверять действительность html). – Blinky
Опять же, вот как они работают *. Когда вы работаете с чем-то вроде HTML, вам либо нужно: 1) использовать регулярные выражения, которые являются дорогостоящими и подвержены ошибкам, или 2) конструировать какое-то представление в памяти, представление на основе классов для внесения изменений, а затем сгладить его обратно в строку , Большинство библиотек, которые работают с HTML, выбирают второй путь, что означает, что они должны полагаться на * стандарты * на то, как построить этот граф объектов. Это означает, что все, что не соответствует этим стандартам (недействительным), должно быть отброшено или иным образом рассматриваться. –