确实,使用RawHTML
(或dangerouslySetInnerHTML
) 感到气馁,而且确实容易XSS 攻击方式如下<img src=x onerror=alert(1)//>
和<p>abc<iframe//src=jAva	script:alert(3)>def</p>
.
但如果需要直接从React设置HTML,则必须使用dangerouslySetInnerHTML
, 直接(例如。<div dangerouslySetInnerHTML={ ({ __html: \'foo <b>bar</b>\' }) } />
) 或通过RawHTML
在古腾堡(例如。<RawHTML>{ \'foo <b>bar</b>\' }</RawHTML>
).
然而,无论是React、jQuery还是vanilla JS(直接访问innerHTML
), 建议的做法始终是在将HTML传递给浏览器之前,对其进行清理,或确保其安全。
因此,尽管WordPress在JS中还没有HTML清理功能,但实际上有一些库,如DOMPurify
我们可以使用它来确保HTML是安全的。
还有其他的图书馆,你可以从中选择,但我想DOMPurify
太棒了,下面是一个示例,假设您已经安装了该软件包:
// At the top in your file:
import DOMPurify from \'dompurify\';
// or you can use wp_enqueue_script() to "normally" load the src/purify.js or
// dist/purify.min.js file, and a global window variable named DOMPurify will
// be available on the page.
// Then somewhere in your code, use DOMPurify.sanitize() to sanitize the HTML:
<div className="custom-post-content">
<RawHTML>{ DOMPurify.sanitize( custompost.content.rendered ) }</RawHTML>
</div>
因此,我希望这有助于&;快乐编码!:)