Html-react-parser: Удаляет ли html-react-parser XSS?

Созданный на 8 мар. 2019  ·  9Комментарии  ·  Источник: remarkablemark/html-react-parser

Я хочу использовать html-response-parser для очистки и синтаксического анализа HTML с моей CMS. Эффективно ли обеззараживает входные данные от XSS-атак? https://stackoverflow.com/questions/29044518/safe-alternative-to-dangerouslysetinnerhtml#answer -48261046 утверждает, что это так. Если так, я думаю, было бы здорово задокументировать / прорекламировать это где-нибудь в README. Спасибо за вашу работу над этим.

question

Самый полезный комментарий

Я не хотел использовать sanitize-html, потому что он массивный . Вместо этого я использовал dompurify, он в 10 раз меньше и не удаляет CSS.

import parse, { domToReact } from 'html-react-parser'
import DOMPurify from 'dompurify'
import React from 'react'

// export function replaceNode() {}

export default function html(html, opts = {}) {
  return parse(DOMPurify.sanitize(html), {
    ...{
      replace: replaceNode,
    },
    ...opts,
  })
}

html('<iframe src=javascript:alert("xss")></iframe>')

Все 9 Комментарий

Отличный вопрос @ dave-stevens-net!

К сожалению, это не так. Причина в том, что я решил сделать эту библиотеку гибкой, а не строгой.

Хотя есть опция замены , проверка против всех возможных атак может быть слишком сложной. Вместо этого я рекомендую использовать дезинфицирующее средство XSS с опаснымSetInnerHTML .

Хорошо знать. Спасибо за быстрый ответ.

Всегда пожалуйста. Если это ответ на ваш вопрос @ dave-stevens-net, можно ли закрыть вопрос?

@ dave-stevens-net Возможно, я раньше оговорился, что эта библиотека небезопасна для XSS.

Первоначально я думал , что эта библиотека не была XSS-безопасной , потому что dangerouslySetInnerHTML был опиралась здесь .

Однако мне кажется, что я не могу воспроизвести какие-либо XSS-уязвимости. См. Мою скрипку , основанную на этом примере .

Дайте мне знать, если вам повезет с воспроизведением XSS-атак.

Мне удалось воспроизвести простую XSS-атаку. Могло быть больше.

Проверь мою скрипку .

Я нашел его здесь https://www.in-secure.org/misc/xss/xss.html

В итоге я написал компонент Sanitize, используя зависимость пакета sanitize-html .

import React from 'react'
import sanitizeHtml from 'sanitize-html'

const Sanitize = ({ html }) => {
    const clean = sanitizeHtml(html, {
        allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img', 'span']),
        allowedAttributes: {
           ...
        },
    })
    return (
        <span
            className="sanitized-html"
            dangerouslySetInnerHTML={{ __html: clean }}
        />
    )
}
export default Sanitize

Пример использования:

<Sanitize html={data.wordpressPage.title} />

@harveydf Отличная находка! Спасибо, что создали скрипку и поделились ею.

Я обновлю README.md чтобы отметить, что эта библиотека не безопасна для XSS.

Я не хотел использовать sanitize-html, потому что он массивный . Вместо этого я использовал dompurify, он в 10 раз меньше и не удаляет CSS.

import parse, { domToReact } from 'html-react-parser'
import DOMPurify from 'dompurify'
import React from 'react'

// export function replaceNode() {}

export default function html(html, opts = {}) {
  return parse(DOMPurify.sanitize(html), {
    ...{
      replace: replaceNode,
    },
    ...opts,
  })
}

html('<iframe src=javascript:alert("xss")></iframe>')

Спасибо, что поделились своим подходом с использованием dompurify @ k1sul1!

Я создал демо Repl.it на основе вашего примера.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги