reactjs 默认情况下,Vue是否为XSS提供安全性或针对XSS提供保护?

x8goxv8g  于 2023-02-12  发布在  React
关注(0)|答案(4)|浏览(148)

我在想怎么保护,

  • Angular
  • 维镇
  • React

抵御XSS攻击。当我访问Angular官方文档时,
https://angular.io/guide/security
,它说:
为了系统地阻止XSS bug,Angular默认将所有值都视为不可信的。当一个值从模板通过属性、特性、样式、类绑定或插值插入DOM时,Angular会清理并转义不可信的值。
以及:
Angular清理HTML、样式和URL的不可信值;无法清理资源URL,因为它们包含任意代码。在开发模式下,Angular在清理期间必须更改值时会打印控制台警告。
以及:
Angular将该值识别为不安全的,并自动清理它,这将删除标记,但保留安全的内容,如元素。
当我去看React的官方文件时
https://reactjs.org/docs/introducing-jsx.html#jsx-prevents-injection-attacks
,它是这样说的:
在JSX中嵌入用户输入是安全的:
以及:
默认情况下,React DOM会在呈现JSX中嵌入的任何值之前对其进行转义。因此,它可以确保您永远无法注入任何未显式写入应用程序的内容。所有内容在呈现之前都会转换为字符串。这有助于防止XSS(跨站点脚本)攻击。
但是对于Vue,我在他们的文档中找不到任何关于XSS保护的内容,或者他们默认提供的任何内容。

    • 我的问题是:**Vue默认情况下是否提供任何方式的XSS攻击防护,或者我是否需要寻找第三方解决方案?

当我谷歌这个主题,我得到了很多博客文章网站和文章参考,例如,这个项目来净化我的HTML:
https://github.com/punkave/sanitize-html

u7up0aaq

u7up0aaq1#

vue中没有内置的消毒剂。根据Evan You(Vue的创建者)对一个问题的评论
内置杀毒程序将为罕见的使用情况(当V-HTML的大多数使用情况是用于可信内容时)添加额外的捆绑包权重;通过设置Vue.prototype.$sanitize = sanitizeHTML然后执行v-html="$sanitize(html)"来添加sanitize-html也是微不足道的。
查看此帖子:https://github.com/vuejs/vue/issues/6333

sczxawaw

sczxawaw2#

一种帮助防止XSS的方法是在html头中添加一个内容安全策略。它通过限制页面可以加载的资源(脚本、图像)以及限制页面的框架来工作。
例如,以下指令只允许从与页面本身相同的源和“www.example.com“加载脚本apis.google.com。
<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.google.com">
还有其他CSP设置可用于帮助抵御随机数和哈希等XSS攻击。有关详细信息,请访问:https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP

nhaq1z21

nhaq1z213#

比答案更多的附加信息:就像在另一个post中提到的那样,sanitize-html有一个327 KB的缺点,但是有更小的封装可用:

为了防止XSS出现在我们的项目中,我们使用了vue-dompuritfy-html,它可以覆盖推荐的eslint规则vue/no-v-html

<div v-dompurify-html="htmlContent" />
qij5mzcb

qij5mzcb4#

我认为公认的答案是误导性的。* 消毒 * HTML和 * 转义 * HTML(也称为HTML编码)是有区别的。前者意味着

<img src=x onerror=alert(1)>

<img src="x">

而后者意味着将其

&lt;img src=x onerror=alert(1)&gt;

只有在少数情况下才需要进行HTML过滤,其中一种情况是用户需要使用富文本格式编写消息,因此您允许用户使用一些白名单标记(如ibimg)编写HTML。
但在99%的情况下,你只是希望文本是文本。所以当你写

<h1>{{ userProvidedString }}</h1>

并且用户输入

<img src=x onerror=alert(1)>

你想让页面显示为<img src=x onerror=alert(1)>。大多数现代的框架,比如Vue,Angular和React,都是通过自动HTML编码输出来实现的。所以,是的,Vue在默认情况下确实可以防止XSS。
如果您希望浏览器将输入解释为HTML,以便页面显示图像和警告框,则可以在Vue中使用v-html,它等效于Angular中的ng-bind-html和React中的dangerouslySetInnerHTML。在这种情况下,您应该考虑使用HTML清理程序。

相关问题