Html-react-parser: O html-react-parser remove o XSS?

Criado em 8 mar. 2019  ·  9Comentários  ·  Fonte: remarkablemark/html-react-parser

Estou querendo usar o html-react-parser para limpar e analisar o HTML do meu CMS. Ele limpa com eficácia a entrada de ataques XSS? https://stackoverflow.com/questions/29044518/safe-alternative-to-dangerouslysetinnerhtml#answer -48261046 afirma que sim. Em caso afirmativo, acho que seria ótimo documentar / anunciar isso em algum lugar no README. Obrigado pelo seu trabalho nisso.

question

Comentários muito úteis

Eu não queria usar sanitize-html, porque é enorme . Em vez disso, usei dompurify, é 10 vezes menor e não remove 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>')

Todos 9 comentários

Ótima pergunta @ dave-stevens-net!

Infelizmente, não. A razão é porque optei por tornar esta biblioteca flexível em vez de rígida.

Embora exista a opção de substituição , verificar todos os ataques possíveis pode ser demais. Em vez disso, recomendo usar um sanitizador XSS com dangerouslySetInnerHTML .

Bom saber. Obrigado pela resposta rápida.

Você é muito bem-vindo. Se isso responder à sua pergunta @ dave-stevens-net, o problema pode ser encerrado?

@ dave-stevens-net Eu posso ter falado errado antes sobre esta biblioteca não ser segura para XSS.

Originalmente, pensei que essa biblioteca não fosse segura para XSS porque dangerouslySetInnerHTML era usada aqui .

No entanto, parece que não consigo reproduzir nenhuma vulnerabilidade XSS. Veja meu violino , que se baseia neste exemplo .

Deixe-me saber se você tiver alguma sorte em reproduzir ataques XSS.

Consegui reproduzir um ataque XSS simples. Pode haver mais.

Verifique meu violino .

Encontrei aqui https://www.in-secure.org/misc/xss/xss.html

Acabei codificando um componente Sanitize usando a dependência de pacote 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

Exemplo de uso:

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

@harveydf Ótimo achado! Obrigado por criar e compartilhar o violino.

Vou atualizar o README.md para observar que esta biblioteca não é segura para XSS.

Eu não queria usar sanitize-html, porque é enorme . Em vez disso, usei dompurify, é 10 vezes menor e não remove 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>')

Obrigado por compartilhar sua abordagem usando dompurify @ k1sul1!

Criei uma demonstração Repl.it com base no seu exemplo.

Esta página foi útil?
0 / 5 - 0 avaliações