React.js允许在href中使用XSS?

时间:2017-10-20 12:30:08

标签: javascript reactjs href xss

href标记中的用户生成链接可能如下所示:

javascript:(() => {alert('MALICIOUS CODE running on your browser')})();

我刚刚在未检查服务器的页面上使用输入字段注入,这些网址以http / https开头。在反应呈现的页面上,我稍后可以点击链接,并且我的代码正在运行。

为什么会这样,当经常陈述时:

  

反应会自动逃脱一切。 (What does it mean when they say React is XSS protected?

1 个答案:

答案 0 :(得分:0)

当react文档指出“所有内容”均已转义时,这仅意味着如果向JSX元素中添加一些子级,则该子级中的“所有内容”均将被转义。

例如:

const element = (
  <h1>
    Random text
  </h1>
);

h1中的所有内容都将被转义,因此,如果您想显示一些来自输入字段的用户文本,而不是“随机文本”,那么您可以放心地删除所有恶意脚本。

警告:这并不意味着您在使用React时根本不必担心XSS。

您仍然可以从该输入字段(或外部源,获取API,转换JSON对象等)中获取不安全的字符串,并将其放置在元素props上,或者使用危险地使用SetInnerHTML或直接将HTML属性作为href,样式等将运行恶意代码的地方。

因此,如果您确实需要在这些道具上放置文字,则有责任在使用数据之前先对数据进行消毒。与保存用户输入的数据时通常在服务器中执行的操作相同,必须对此数据进行清理,以免将代码保存在数据库中。