Content Security Policy減小劫持

Content Security Policy減小劫持

什麼是CSP?

CSP是由單詞 Content Security Policy 的首單詞組成,是HTML5帶給咱們的一套全新主動防護的體系,旨在減小(注意這裏是減小而不是消滅)跨站腳本攻擊。
CSP是一種由開發者定義的安全性政策性申明,經過CSP所約束的的規責指定可信的內容來源(這裏的內容能夠指腳本、圖片、iframe、fton、style等等可能的遠程的資源)。經過CSP協定,讓WEB處於一個安全的運行環境中。html

白名單

CSP定義了 Content-Security-Policy HTTP頭來爲你的內容建立一個來源的白名單。瀏覽器只容許白名單域裏的資源和代碼執行。這樣就算攻擊者找到了一個漏洞注入腳本,腳本不在白名單裏面照樣沒法執行。
舉例說明:
咱們信任m.58.com的代碼,咱們能夠這樣定義咱們的協議
Content-Security-Policy: script-src 'self' http://m.58.com
script-src控制script標籤相關的策略,咱們指定了'self'和http://m.58.com做爲他的值,瀏覽器只會下載並執行本域和http://m.58.com的腳本。
更多指令介紹:web

  • connect-src
    限制使用XHR,WebSockets,和EventSource的鏈接源。chrome

  • font-src
    指定字體的下載源。segmentfault

  • frame-src
    指定frame能夠嵌入的鏈接源。瀏覽器

  • img-src
    指定圖片的加載源。安全

  • media-src
    指定video和audio的數據源。dom

  • object-src
    指定Flash和其餘插件的鏈接源。ide

  • style-src
    指定link的鏈接源。和script-src相似。post

默認若是你不指定這些指令的值,將容許全部的來源,例如 font-src:*和不寫font-src是等價的。
固然你也能夠重寫默認值,只要使用default-src就能夠。好比:指定了default-src:https://example.com 可是沒有指定font-src,那麼你的font-src也只能從https://example.com加載。在以前的例子中咱們只指定了script-src,這說明咱們能夠從任何其餘的地方加載image,font和其餘資源。
你能夠爲你的web應用指定多個或者一個指令,只須要在HTTP頭裏面列出來這些值,不一樣的值之間用「;」來分隔。可是若是你寫成 script-src https://host1.com;script-src:https://host2.com,那麼第二個script-src將不起做用,正確的寫法是:script-src https://host1.com https://host2.com 。
再舉一個例子:若是你的靜態資源全都來自一個CDN,而且你知道不會有frame和其餘插件。你能夠這樣寫
Content-Security-Policy:default-src https://cdn.example.net;frame-src 'none';object-src:'none'
關鍵詞:字體

  • 'none'
    什麼都不匹配。

  • 'self'
    匹配當前的域,不包括子域。

  • 'unsafe-inline'
    容許inline JavaScript 和 CSS。

  • 'unsafe-eval'
    容許 eval,new Function等的執行。

這幾個關鍵詞須要用單引號引用起來,若是不引用,則會被認爲是域名。

詳細內容參考:http://content-security-policy.com/

使用示例

使用CSP時,Web應用能夠經過提供一個Content-Security-Policy HTTP頭或一個META的HTML元素.不過這樣的政策只在當前文檔適用而已。
META使用示例:

<meta http-equiv="Content-Security-Policy" content="default-src *.tanx.com *.mmstat.com *.meituan.com https://i.meituan.com/ https://ms0.meituan.com https://mc0.meituan.com 192.168.4.223:9999 *.maoyan.com  *.meituan.net www.google-analytics.com wvjbscheme://* imeituan://* *.dianping.com *.dpfile.com 'self' 'unsafe-inline' 'unsafe-eval' blob: data:;">

chrome裏查看頁面用到哪些域名:

domain

瀏覽器兼容性

CSP 目前有兩版:CSP1和CSP2(有些指令是屬於CSP2,好比:child-src、form-action等,詳見http://content-security-policy.com/)

兩版的支持狀態能夠在http://caniuse.com/#search=csp
中查到。

參考資料:

http://www.zhihu.com/question/21979782
http://www.2cto.com/Article/201408/327064.html
https://imququ.com/post/content-security-policy-reference.html
http://www.javashuo.com/article/p-qljfxjeo-gt.html
http://content-security-policy.com/

相關文章
相關標籤/搜索