危险地设置内部HTML是从React中的API渲染HTML的唯一方法吗?

埃文斯

我正在用React制作电视指南。我正在从此API中获取表演信息:http : //api.tvmaze.com/episodes/333

如您所见,summary包含html。如果我渲染该字段。那么HTML将被解释为字符串,这意味着您可以<p>在页面上看到标签等。

我知道我可以使用,dangerouslySetInnerHTML但出于安全原因不建议使用最佳做法是什么?从API获取格式化的文本并需要呈现它必须非常普遍。我很惊讶,没有一个过滤器,这将允许<p><h1>等等,但不script标签。

克里斯

危险地设置内部HTML是从React中的API渲染HTML的唯一方法吗?

从技术上讲,没有。如果愿意,您可以使用Babel变压器做一些魔术,但是这种方法不再“安全”或推荐使用。这只是一个更灵活的选择。有关更多信息,请参见此处

也就是说,dangerouslySetInnerHTML仍然是将原始标记插入组件的推荐方法。没错,这个名称令人恐惧,只是提醒开发人员潜在的XSS风险。使用它的事实不会自动使代码“臭”或“坏”。

换句话说,如果您确定所获取的代码不是恶意的,那是很安全的选择。如果您信任该API,则无需担心。例如,这是非常安全的

return <div dangerouslySetInnerHTML={{__html: "<p>foo bar</p>"}} />;

这是这样的:

let markup = SomeApiCallToTrustedProvider(); //"<p>foo bar</p>"
return <div dangerouslySetInnerHTML={{__html: markup}} />;

我不是该领域的专家,但是我的理解是,如果用户无法影响其他用户的网站展示,那么您可以免受传统XSS攻击。例如,如果您要从数据库中获取未经过处理的输入数据,并将其反映为代码中的原始标记。这将允许恶意用户向数据库提交代码,然后将代码呈现给其他用户,然后将其有效执行,使用户能够操纵您的页面。

我很惊讶没有一个允许使用的过滤器<p><h1>但没有脚本标记。

好吧,这将是某种消毒。还有,你如何实现你自己的,片段在那里这里例如...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React.js:设置innerHTML vs危险地设置InnerHTML

如何在Java中永久运行程序?是System.in.read()的唯一方法吗?

React是否会将危险地将SetInnerHTML中设置的html代码片段转换为虚拟DOM?

使用危险设置内部HTML中的React组件进行React

反应使用危险地使用SetInnerHTML渲染带有html标签的json

使用硬件计时器是实现流程计划的唯一方法吗?

不良React的示例危险地SetInnerHTML?

JSX组件+危险地设置内部HTML?

危险地设置InnerHTML和<Link>

使用Fragment通过危险地插入在后端呈现的HTML SetInnerHTML

如何访问由Enzyme测试中的危险地设置InnerHTML创建的实际呈现的HTML

危险地渲染内容时如何使用React链接?

@ Component + router-outlet是在Angular 7中具有可重用模板的唯一方法吗?

反应-不要危险地解析某些HTML标签

反应-将状态传递给使用危险地设置的HTML呈现的模板

回调是Web API绑定与JavaScript引擎链接的唯一方法吗?

构造函数是在C#中初始化类中非空属性的唯一方法吗?

危险地反应SetInnerHTML内部片段

在危险地设置InnerHtml或类似中添加React组件

将变量JSX转换为危险地渲染SetInnerHTML()

Django / HTML-表单是发送POST请求的唯一方法吗?

使用WebAudio API,轮询是观察AudioParam值更改的唯一方法吗?

:gen-class是在Clojure中扩展Java类的唯一方法吗?

是通过鼠标在 LXQt 中添加快速启动的唯一方法吗?

使用 chdir() 是在 Linux C 中更改工作目录的唯一方法吗?

如何危险地设置 idSetInnerHTML?

访问创建者帐户或使用超级管理员是在 Google Classroom API 中收集课程数据的唯一方法吗?

Intersection Observer API 是滚动动画的唯一方法吗?

AAD/OAuth 是使用 D365 API 进行身份验证的唯一方法吗?