Я работал последние 2 дня на ОМУ и Markdown , и я не нашел решение для данных запаса с безопасностью. Я бы хотел, чтобы пользователи могли отправлять HTML / XML <code> (с WMD) на моем сайте.
На данный момент я располагаю данными в формате Markdown, но если отключить JavaScript, пользователь может легко нажать XSS. Если я strip_tags
или html_entities
все данные, я теряю пользовательский HTML / XML <code>. Как мне это сделать?
По-моему, мне нужно html_entities
только код между pre / pre, но как ?! Мои данные находятся в Markdown.
После чего я могу сделать, чтобы запретить атрибуты XSS:
<img src="javascript:alert('xss');" />
Чтобы «очистить» ваш HTML, вы можете использовать такой инструмент, как HTML Purifier
В основном, это позволяет вам указать, какие теги / атрибуты разрешены, а только сохраняет их.
Он также создает допустимый (X) HTML-код как вывод – что приятно.
На демонстрационной странице вы можете увидеть пример, который почти точно вы отправили XSS, btw 😉
Например, вы можете попробовать с некоторым HTML следующим образом:
test <img src="javascript:evil();" onload="evil();" /> test <img src="http://www.google.com/a.Png" /> test2
Выход:
test test <img src="http://www.google.com/a.Png" alt="a.Png" /> test2
Тег img
с XSS не сохранился; другой имеет; и добавлен атрибут alt
, чтобы быть стандартным.
Это может не решить все ваши проблемы, но если вы даете пользователям возможность вводить HTML, это определенно полезно (смею ли я говорить «это обязательно»?)