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不是萬能的,有興趣的同窗能夠看下防運營商劫持一:

可二者結合使用,但願對你有所幫助~

相關文章
相關標籤/搜索