阅读 139

Content Security Policy 与跨域脚本攻击 XSS

跨域脚本攻击 XSS 是最常见、危害最大的网页安全漏洞。XSS:Cross Site Scrit 跨站脚本攻击(为与 CSS 区别,所以在安全领域叫 XSS)。攻击原理是代码被恶意注入到页面中(例如评论),然后其他用户在访问页面时,浏览器执行了代码逻辑。


为了防止它们,要采取很多编程措施,非常麻烦。很多人提出,能不能根本上解决问题,浏览器自动禁止外部注入恶意脚本?这就是"网页安全政策"(Content Security Policy,缩写 CSP)的来历。


CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。

CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。

两种方法可以启用 CSP。

一种是通过 HTTP 头信息的Content-Security-Policy的字段。

Content-Security-Policy: script-src 'self'; object-src 'none';style-src cdn.example.org third-party.org; child-src https:


另一种是通过网页的<meta>标签。

<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">


上面代码中,CSP 做了如下配置。

  • 脚本:只信任当前域名

  • <object>标签:不信任任何URL,即不加载任何资源

  • 样式表:只信任cdn.example.org和third-party.org

  • 框架(frame):必须使用HTTPS协议加载

  • 其他资源:没有限制

启用后,不符合 CSP 的外部资源就会被阻止加载。


Node.js 中也可以使用 helment,koa-helmet: 设置Http头保障应用程序安全koa-helmet 主要是通过 npm 包 helemt 来实现开发者的应用程序更加安全。

// This...app.use(helmet());
 // ...is equivalent to this:app.use(helmet.contentSecurityPolicy());
app.use(helmet.dnsPrefetchControl());
app.use(helmet.expectCt());
app.use(helmet.frameguard());
app.use(helmet.hidePoweredBy());
app.use(helmet.hsts());
app.use(helmet.ieNoOpen());
app.use(helmet.noSniff());
app.use(helmet.permittedCrossDomainPolicies());
app.use(helmet.referrerPolicy());
app.use(helmet.xssFilter());


更详细的设置在这里: https://helmetjs.github.io/docs/



参考:

http://www.ruanyifeng.com/blog/2016/09/csp.html

https://juejin.cn/post/6844903699584647175

https://www.npmjs.com/package/koa-helmet


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐