href
标记中的用户生成链接可能如下所示:
javascript:(() => {alert('MALICIOUS CODE running on your browser')})();
我刚刚在未检查服务器的页面上使用输入字段注入,这些网址以http
/ https
开头。在反应呈现的页面上,我稍后可以点击链接,并且我的代码正在运行。
为什么会这样,当经常陈述时:
反应会自动逃脱一切。 (What does it mean when they say React is XSS protected?)
答案 0 :(得分:0)
当react文档指出“所有内容”均已转义时,这仅意味着如果向JSX元素中添加一些子级,则该子级中的“所有内容”均将被转义。
例如:
const element = (
<h1>
Random text
</h1>
);
h1中的所有内容都将被转义,因此,如果您想显示一些来自输入字段的用户文本,而不是“随机文本”,那么您可以放心地删除所有恶意脚本。
警告:这并不意味着您在使用React时根本不必担心XSS。
您仍然可以从该输入字段(或外部源,获取API,转换JSON对象等)中获取不安全的字符串,并将其放置在元素props上,或者使用危险地使用SetInnerHTML或直接将HTML属性作为href,样式等将运行恶意代码的地方。
因此,如果您确实需要在这些道具上放置文字,则有责任在使用数据之前先对数据进行消毒。与保存用户输入的数据时通常在服务器中执行的操作相同,必须对此数据进行清理,以免将代码保存在数据库中。