当前位置: 首页 > 知识库问答 >
问题:

当他们说 React 受 XSS 保护时,这意味着什么?

彭允晨
2023-03-14

我在React教程上看过这个。这是什么意思?

反应是安全的。我们没有生成HTML字符串,因此XSS保护是默认设置。

如果 React 是安全的,XSS 攻击如何工作?如何实现这种安全性?

共有2个答案

高琛
2023-03-14

React会自动为您转义变量…它通过带有恶意Javascript的字符串超文本标记语言防止XSS注入…自然,输入也会随之被清理。

例如,假设您有此字符串

var htmlString = '<img src="javascript:alert('XSS!')" />';

如果您尝试在 react 中呈现此字符串

render() {
    return (
        <div>{htmlString}</div>
    );
}

您将从字面上看到整个字符串,包括

如果查看源html,您将看到

<span>"<img src="javascript:alert('XSS!')" />"</span>

以下是关于什么是XSS攻击的更多细节

React基本上做到了这一点,因此您不能插入标记,除非您自己在render函数中创建元素...也就是说,他们有一个函数允许这样的渲染,这个函数叫做< code > dangerouslysettinnerhtml ...这里有更多的细节

需要注意的是,有一些方法可以绕过React逸出的内容。一种更常见的方式是当用户为组件定义道具时。不要从用户输入中扩展任何数据作为道具!

葛海阳
2023-03-14

ReactJS在设计上非常安全,因为

  1. 视图中的字符串变量自动转义
  2. 使用JSX可以传递函数作为事件处理程序,而不是传递包含恶意代码的字符串

所以像这样典型的攻击是行不通的

js lang-js prettyprint-override">const username = "<img onerror='alert(\"Hacked!\")' src='invalid-image' />";

class UserProfilePage extends React.Component {
  render() {
    return (
      <h1> Hello {username}!</h1>
    );
  }
}

ReactDOM.render(<UserProfilePage />, document.querySelector("#app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
 类似资料:
  • 我想创建一个

  • 问题内容: 我正在审查为准备明天早上的期末考试而做的期中考试。我把这个问题弄错了,但是没有指出正确的答案,因此我忽略了询问教授。 考虑以下代码片段: 以下有关该代码的下列哪项正确? 主要方法旨在捕获和处理所有类型的异常。 主要方法是设计用来捕捉和处理鱼。 如果出现这种情况,则main方法应该简单地终止。 如果发生任何异常,main方法应该简单地终止。 我选择了第二个选项。 问题答案: 答案是数字4

  • 为什么我们可以创建一个静态类的多个实例?我试图在静态类和静态方法之间找到并行点,但这个事实使我困惑。

  • 在搜索有关保守impl-trait的文档时,我发现了以下示例: 生存期在返回类型中是什么意思? 我知道这个关于生命周期限制的问题,但我认为用例是不同的。如果我能很好地理解答案: trait对象仅对生存期“a”有效 这意味着位于堆中某处的trait对象将在生命周期中持续一段时间。 但在这里,这不是特征对象,而是堆栈中的具体对象。因此编译器不需要有关于其生存期的提示。 我错过了什么?

  • 问题内容: 这意味着全局名称空间将受到污染是什么意思? 我不太了解被污染的全局名称空间的含义。 问题答案: 垃圾收集快速说明 由于变量失去作用域,因此将有资格进行垃圾回收。如果它们是全局作用域的,那么它们将不符合收集条件,直到全局名称空间失去作用域。 这是一个例子: 将其添加到全局名称空间(至少对我来说)应该会占用10,000 kb的内存使用量(win7 firefox),而不会被收集。其他浏览器