CSP(内容安全策略)防运营商劫持

(一)前言
CSP英文全称Content Security Policy,中文意思是 内容安全策略
CSP以白名单的机制对网站加载或执行的资源起作用,在网页中,这样的策略通过 HTTP 头信息或者 meta 元素定义。用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。无论是数据盗取、网站内容污染还是散发恶意软件。

(二)CSP的应用
可以分为前端和后端配置

  1. 前端配置
    在 HTML 的 Head 中添加 Meta 标签
<meta http-equiv="Content-Security-Policy" content="script-src 'nonce-shendun' zeptojs.com; object-src 'none';">
<!DOCTYPE html>
<html>
<head>
  <script>
    console.log('发生劫持,初始化就直接置顶的流氓行为,CSP也无法防御,但可以通过埋点记录LOG,通知工信部处理!!');
  </script>
  <meta charset="utf-8" />
  <meta http-equiv="Content-Security-Policy" content="script-src 'nonce-shendun' zeptojs.com; object-src 'none';">
  <title>CSP测试</title>
  <script>
    console.log('来劫持你了.... 但被阻止了,未能发生有效劫持!');
  </script
  <!-- 安全标签 -->
  <script nonce=shendun>
    console.log('设置了nonce,其值与受信任来源列表中的值相匹配 ,此处有效!!');
  </script>
</head>
<body>
  <div>CSP测试</div>
  <!-- zeptojs.com 加入了白名单 -->
  <script src="http://zeptojs.com/zepto.min.js"></script>
  <!-- 未加入白名单,被拦截 -->
  <script src="https://mt.cnzz.com/js/hdpi_canvas.js"></script>
</body>
</html>

这种方式除了 头部的注入型劫持未被拦截以外 ,其他 script 劫持均被拦截。需要特别注意的是这段代码中的 nonce-shendun ,这里可以理解为 script 的安全属性,nonce- 是CSP提供的参数,shendun 这个名字是自定义的(官方推荐这里填随机数)。

  1. 后端配置
    以 Nginx 为例,配置 Sever 文件,添加如下代码:
server {
    ...
    add_header Content-Security-Policy "default-src *; script-src 'self' 'nonce-shendun' baidu.com *.baidu.com;";
    ...

源列表中也接受了四个关键字:

‘none’ 你可能会期望,什么也没有。
‘self’ 匹配当前来源,但不匹配其子域。
‘unsafe-inline’ 允许内联JavaScript和CSS (很多劫持是script直接注入,所以这里不推荐这么配置)
‘unsafe-eval’ 允许文本到JavaScript的机制eval。

API链接导航

(三)总结
CSP不是万能的,但是如果搭配script、iframe注入型防运营商劫持,可以为网站增加更多防护。

至于XSS攻击,可以参考下面文章
前端安全系列(一):如何防止XSS攻击

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值