CSP防运营商劫持

1、什么是CSP

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

3、CSP的应用

2种方式前端

1. 前端配置 - Meta标签

在 HTML 的 Head 中添加 Meta 标签web

<meta http-equiv="Content-Security-Policy" content="script-src 'nonce-shendun' zeptojs.com; object-src 'none';">
复制代码

(提示:这里推荐本地启动web服务,去访问这个页面),这里是最基本的配置,完整代码以下:canvas

<!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 这个名字是自定义的(官方推荐这里填随机数)。后端

2. 后端配置

Nginx 为例,配置 Sever 文件,添加以下代码:安全

server {
    ...
    add_header Content-Security-Policy "default-src *; script-src 'self' 'nonce-shendun' baidu.com *.baidu.com;";
    ...
复制代码

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

  • 'none' 你可能会指望,什么也没有。
  • 'self' 匹配当前来源,但不匹配其子域。
  • 'unsafe-inline' 容许内联JavaScript和CSS (不少劫持是script直接注入,因此这里不推荐这么配置
  • 'unsafe-eval' 容许文本到JavaScript的机制eval。

CSP的API和用法指南太多了,奉上传送门:developer.mozilla.org/zh-CN/docs/… post

4、数据分析

无论是前端配置仍是后端配置 CSP 都很是方便,可是也存在 Head 头部协议被篡改,致使 CSP 失效的现象,这个时候 “薅羊毛” 的就有可乘之机。测试

如下是一个线上活动(加了CSP)的真实数据:网站

日期 PV UV 劫持PV 劫持UV 劫持率(劫持uv/uv)
10/16 485034 106487 91376 41069 38.56%
10/15 542713 123202 104994 48308 39.2%

这些真实数据做者未作任何处理,不过这里劫持UV数据拉的不是很科学,没有过滤掉一个页面出现屡次劫持的成分,但整体劫持率仍是很高。

开始怀疑人生...

5、总结

CSP不是万能的,有兴趣的同窗能够看下防运营商劫持一:

可二者结合使用,但愿对你有所帮助~

相关文章
相关标签/搜索