html-react-parserを使用して、CMSからHTMLをサニタイズおよび解析したいと考えています。 XSS攻撃からの入力を効果的にサニタイズしますか? https://stackoverflow.com/questions/29044518/safe-alternative-to-dangerouslysetinnerhtml#answer -48261046は、そうしていると主張しています。 もしそうなら、これをREADMEのどこかに文書化/宣伝するのは素晴らしいことだと思います。 これに取り組んでくれてありがとう。
素晴らしい質問@ dave-stevens-net!
残念ながらそうではありません。 その理由は、このライブラリを厳密ではなく柔軟にすることを選択したためです。
置換オプションはありますが、考えられるすべての攻撃をチェックするのは多すぎる可能性があります。 私の代わりにとXSSの消毒剤使用することをお勧めしますdangerouslySetInnerHTMLを。
知っておくと良い。 迅速な返答に感謝致します。
いいえ、どいたしまして。 これがあなたの質問@ dave-stevens-netに答える場合、問題を解決できますか?
簡単なXSS攻撃を再現することができました。 もっとあるかもしれません。
私のフィドルを確認してください。
私はここでそれを見つけましたhttps://www.in-secure.org/misc/xss/xss.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分の1で、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>')
最も参考になるコメント
巨大なので、sanitize-htmlは使いたくありませんでした。 代わりにdompurifyを使用しましたが、これは10分の1で、CSSは削除されません。
html('<iframe src=javascript:alert("xss")></iframe>')