Вопрос

Я ищу простое средство для очистки HTML, написанное на JavaScript.Он не обязательно должен быть защищен XSS на 100%.

Я внедряю Markdown и редактор WMD Markdown (ветвь SO master от github) на своем веб-сайте.Проблема в том, что HTML, показанный в режиме реального времени, не фильтруется, как здесь, на SO.Я ищу простое / быстрое средство очистки HTML, написанное на JavaScript, чтобы я мог фильтровать содержимое окна предварительного просмотра.

Нет необходимости в полноценном анализаторе с полной защитой XSS.Я не отправляю выходные данные обратно на сервер.Я отправляю уценку на сервер, где я использую надлежащее средство полной очистки HTML, прежде чем сохранить результат в базе данных.

Google для меня абсолютно бесполезен.Я только что получил сотни (часто неправильных) статей о том, как отфильтровать javascript из сгенерированного пользователем HTML на всех видах серверных языков.

Обновить

Я немного лучше объясню, зачем мне это нужно.На моем веб-сайте есть редактор, очень похожий на тот, что есть здесь, на StackOverflow.Там есть текстовая область для ввода синтаксиса MarkDown, а под ней окно предварительного просмотра, в котором показано, как это будет выглядеть после того, как вы отправите его.

Когда пользователь отправляет что-либо, оно отправляется на сервер в формате MarkDown.Сервер преобразует его в HTML, а затем запускает на нем средство очистки HTML для очистки HTML.MarkDown допускает произвольный HTML-код, поэтому мне нужно его очистить.Например, пользователь вводит что-то вроде этого:

<script>alert('Boo!');</script>

Конвертер MarkDown не затрагивает его, поскольку это HTML.Средство очистки HTML удалит его, так что элемент script исчезнет.

Но это не то, что происходит в окне предварительного просмотра.Окно предварительного просмотра только преобразует MarkDown в HTML, но не очищает его.Итак, в окне предварительного просмотра будет элемент script.Это означает, что окно предварительного просмотра отличается от фактического рендеринга на сервере.

Я хочу исправить это, поэтому мне нужно быстрое и грязное средство для очистки JavaScript HTML.Подойдет что-нибудь простое с занесением базовых элементов / атрибутов в черный и белый списки.Это не обязательно должно быть XSS-безопасным, потому что защита XSS осуществляется с помощью серверного HTML sanitizer.

Это просто для того, чтобы убедиться, что окно предварительного просмотра будет соответствовать фактическому рендерингу в 99,99% случаев, что для меня достаточно хорошо.

Вы можете помочь?Заранее спасибо!

Это было полезно?

Решение

Вам следует взглянуть на тот, который рекомендован в этом вопросе Очистить / Переписать HTML на стороне клиента

И просто чтобы быть уверенным, что вам не нужно больше разбираться в XSS, пожалуйста, ознакомьтесь с ответами на этот вопрос Как предотвратить атаки на внедрение Javascript в сгенерированный пользователем HTML

Другие советы

Мы разработали простой HtmlSantizer и разместили его с открытым исходным кодом здесь: https://github.com/jitbit/HtmlSanitizer

Использование

var result = HtmlSanitizer.SanitizeHtml(input);

[Отказ от ответственности!Я один из авторов!]

для моей функции я заботился только о том, чтобы строка не была пустой и содержала только буквенно-цифровые символы.При этом используется обычный JS и никаких третьих библиотек или чего-либо еще.Он содержит длинное регулярное выражение, но оно выполняет свою работу ;) Вы могли бы опираться на это, но ваше регулярное выражение должно быть чем-то более похожим '< скрипт >|< /script >' (с экранированными символами там, где это необходимо, и без пробелов).;)

    var validateString = function(string) {

      var validity = true;

      if( string == '' ) { validity = false; }

      if( string.match( /[ |<|,|>|\.|\?|\/|:|;|"|'|{|\[|}|\]|\||\\|~|`|!|@|#|\$|%|\^|&|\*|\(|\)|_|\-|\+|=]+/ ) != null ) {

          validity = false;
      }

      return validity;
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top