网站内容策略(来源XSS攻击的核心是利用了脚本是被第三方注入的)

优采云 发布时间: 2022-02-13 21:20

  网站内容策略(来源XSS攻击的核心是利用了脚本是被第三方注入的)

  万维网的安全策略植根于同源策略。例如,代码只能访问数据,不能访问权限。每个来源都与网络的其余部分隔离,为开发人员创建了一个安全的沙箱。这在理论上是完美的,但现在攻击者已经找到了破坏系统的巧妙方法。

  这就是 XSS,一种跨站点脚本攻击,它使用虚假内容和欺骗性点击绕过同源策略。这是一个大问题,如果攻击者成功注入代码,将会泄露大量用户数据。

  现在我们引入一种新的有效的安全防御策略来降低这种风险,即内容安全策略(CSP)。

  来源白名单

  XSS 攻击的核心是利用浏览器无法区分脚本是由第三方注入还是实际上是应用程序的一部分。例如,Google +1 按钮将加载并执行代码,但我们不能依靠浏览器上的图像来判断代码是否真的来自。浏览器下载并执行页面请求中的任意代码,无论其来源如何。

  CSP 定义 Content-Security-Policy HTTP 标头以允许您创建受信任源的白名单,以便浏览器仅执行和呈现来自这些源的资源,而不是盲目地信任服务器提供的所有内容。即使攻击者可以找到漏洞注入脚本,也不会执行,因为源不收录在白名单中。

  以上面的 Google +1 按钮为例,因为我们相信提供有效的代码,就像我们自己一样,我们可以定义一个策略,允许浏览器只执行来自以下两个来源之一的脚本。

  内容安全策略:script-src 'self'

  是不是很简单?script-src 可以控制指定页面的脚本相关权限。这样,浏览器只会从页面本身下载和执行脚本。

  一旦我们定义了这个策略,浏览器会在检测到注入代码时抛出错误(注意它是什么浏览器)。

  内容安全策略适用于所有常用资源

  虽然脚本资源是最明显的安全隐患,但 CSP 也提供了丰富的指令集,让页面可以控制各类资源的加载,例如以下几种:

  content-src:限制连接的类型(例如 XHR、WebSockets 和 EventSource)

  font-src:控制网页字体的来源。例如,您可以使用 font-src 来使用 Google 的网络字体。

  frame-src:列出可以嵌入的帧的来源。例如 frame-src 只允许嵌入 YouTube 视频。.

  img-src:定义可加载图片的来源。

  media-src:限制视频和音频的来源。

  object-src:限制 Flash 和其他插件的来源。

  style-src:类似于 Script-src,但适用于 css 文件。

  默认情况下,所有设置都打开,没有任何限制。您可以用分号分隔多个指令,但类似于 script-src ;script-src,第二个指令将被忽略。正确的拼写是 script-src。

  例如,如果您的应用程序需要从内容交付网络(例如 CDN)加载所有资源,并且知道不需要框架或插件内容,您的策略可能如下所示:

  内容安全策略:默认源;框架源“无”;对象源“无”

  细节

  我在示例中使用的 HTTP 标头是 Content-Security-Policy,但现代浏览器已经通过前缀提供支持:Firefox 使用 x-Content-Security-Policy,WebKit 使用 X-WebKit-CSP。未来将逐步过渡到统一标准。

  可以为每个不同的页面设置策略,这提供了很大的灵活性。因为您的网站可能收录带有 Google +1 按钮的网页,而其他网页则没有。

  每个指令的源列表可以非常灵活,您可以指定模式(data:、https:),或指定主机名范围(匹配主机上的任何来源、任何模式和任何端口),或者指定一个完整的URI(:443,专指https协议,域名,443端口)。

  您还可以在源列表中使用四个关键字:

  "none":你可能期望什么都不匹配

  “self”:与当前来源相同,但没有子域

  “unsafe-inline”:允许内联 Javascript 和 CSS

  “unsafe-eval”:允许向 JS 发送文本的机制,例如 eval

  请注意,这些 关键词 需要被引用。

  沙盒

  这里还有一个值得讨论的指令:沙盒。与其他指令有些不一致,它主要控制在页面上执行的操作,而不是页面可以加载的资源。如果设置了此属性,则页面的行为类似于设置了沙盒属性的框架。这对页面有广泛的影响,例如阻止表单提交等。这有点超出了本文的范围,但是您可以在 HTML5 规范的“沙箱标志设置”部分找到更多信息。

  有害的内联代码

  CSP 基于源白名单,但没有解决 XSS 攻击的最大来源:内联脚本注入。如果攻击者可以注入收录有害代码的脚本标签( ),则浏览器没有很好的机制来区分这个标签。CSP 只能通过完全禁止内联脚本来解决这个问题。

  此禁令不仅包括嵌入在脚本中的脚本标签,还包括内联事件处理程序和 javascript: 这样的 URL。您需要将脚本标记的内容放入外部文件中,并将 javascript: 和 Content Security Policy CSP 替换为适当的 addEventListener

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线