CSP內(nèi)容安全策略簡介

https://www.html5rocks.com/en/tutorials/security/content-security-policy/

Content Security Policy (CSP)

一般來說鸣个,CSP作為黑客/白名單機(jī)制灾杰,用于擴(kuò)展程序加載或執(zhí)行的資源苇羡。

Web的安全模式植根于同一起源策略。代碼https://mybank.com只能訪問https://mybank.com數(shù)據(jù)罩锐,并且https://evil.example.com絕對不允許訪問。每個(gè)起源與網(wǎng)絡(luò)的其余部分保持隔離,為開發(fā)人員提供了一個(gè)安全的沙箱师坎,用于構(gòu)建和播放。在理論上堪滨,這是非常輝煌的胯陋。實(shí)際上,攻擊者發(fā)現(xiàn)了顛覆系統(tǒng)的聰明方法袱箱。

例如遏乔,跨站腳本(XSS)攻擊繞過同一起源策略,通過欺騙網(wǎng)站將惡意代碼與預(yù)期內(nèi)容一起發(fā)送发笔。這是一個(gè)巨大的問題盟萨,因?yàn)闉g覽器將頁面上顯示的所有代碼信任為該頁面安全來源的合法部分。該XSS小抄是一個(gè)攻擊者可能利用通過注入惡意代碼來破壞這種信任的方法的舊有代表性的橫截面了讨。如果一個(gè)攻擊者成功地注入了任何代碼捻激,那么它幾乎是游戲過程:用戶會話數(shù)據(jù)被泄露,應(yīng)該保密的信息被過濾到壞人量蕊。我們顯然希望如果可能的話铺罢。

本教程強(qiáng)調(diào)了一個(gè)有希望的新防御,可以顯著降低XSS攻擊在現(xiàn)代瀏覽器中的風(fēng)險(xiǎn)和影響:內(nèi)容安全策略(CSP)残炮。

來源白名單

XSS攻擊利用的核心問題是瀏覽器無法區(qū)分旨在成為應(yīng)用程序一部分的腳本以及第三方惡意注入的腳本韭赘。例如,本文頂部的Google +1按鈕從https://apis.google.com/js/plusone.js本頁面的上下文加載并執(zhí)行代碼势就。我們相信該代碼泉瞻,但我們不能指望瀏覽器找出自己的代碼apis.google.com是真棒脉漏,而代碼apis.evil.example.com可能不是。瀏覽器愉快地下載并執(zhí)行頁面請求的任何代碼袖牙,無論來源如何侧巨。

CSP定義了HTTP頭,而不是盲目信任服務(wù)器提供的所有信息鞭达,Content-Security-Policy可以允許您創(chuàng)建信任內(nèi)容源的白名單司忱,并指示瀏覽器僅從這些來源執(zhí)行或呈現(xiàn)資源。即使攻擊者可以找到一個(gè)注入腳本的孔畴蹭,腳本也不會與白名單匹配坦仍,因此不會被執(zhí)行。

由于我們信任apis.google.com提供有效的代碼叨襟,我們相信自己也做同樣的事情繁扎,我們定義一個(gè)策略,只允許腳本在來自這兩個(gè)來源之一時(shí)執(zhí)行:

Content-Security-Policy: script-src 'self' https://apis.google.com

簡單吧糊闽?您可能猜到梳玫,script-src是一個(gè)指令,它控制特定頁面的一組與腳本相關(guān)的權(quán)限右犹。我們已經(jīng)指定'self'了一個(gè)有效的腳本來源提澎,https://apis.google.com另一個(gè)腳本。瀏覽器將盡可能地apis.google.com通過HTTPS從當(dāng)前頁面的起源下載并執(zhí)行JavaScript 傀履。

通過定義此策略虱朵,瀏覽器將簡單地拋出錯(cuò)誤,而不是從任何其他源加載腳本钓账。當(dāng)一個(gè)聰明的攻擊者確實(shí)設(shè)法將代碼注入您的網(wǎng)站時(shí)碴犬,她會長期運(yùn)行錯(cuò)誤信息,而不是她期望的成功:

csp-error.png

政策適用于各種資源

雖然腳本資源是最明顯的安全風(fēng)險(xiǎn)梆暮,但CSP提供了一組豐富的策略指令服协,可以對頁面允許加載的資源進(jìn)行相當(dāng)精細(xì)的控制。你已經(jīng)看到了script-src啦粹,所以這個(gè)概念應(yīng)該是清楚的偿荷。我們快速瀏覽其余的資源指令:

  • base-uri限制頁面<base>元素中可能出現(xiàn)的網(wǎng)址。
  • child-src列出了工作人員和嵌入式框架內(nèi)容的URL唠椭。例如:child-src https://youtube.com可以嵌入來自YouTube的視頻跳纳,但不能從其他來源嵌入視頻。使用此代替不推薦使用的frame-src指令贪嫂。
  • connect-src 限制您可以連接的來源(通過XHR寺庄,WebSockets和EventSource)。
  • font-src指定可以提供網(wǎng)絡(luò)字體的起源。Google的Web字體可以通過啟用font-src https://themes.googleusercontent.com
  • form-action列出從<form>標(biāo)簽提交的有效端點(diǎn)斗塘。
  • frame-ancestors指定可以嵌入當(dāng)前頁面的源代碼赢织。該指令適用于<frame>,<iframe>馍盟,<embed>于置,和<applet>標(biāo)簽。此偽指令不能在<meta>標(biāo)記中使用贞岭,僅適用于非HTML資源八毯。
  • frame-src棄用。使用child-src來代替瞄桨。
  • img-src 定義可以加載圖像的起源宪彩。
  • media-src 限制允許傳送視頻和音頻的起源。
  • object-src 允許控制Flash和其他插件讲婚。
  • plugin-types 限制頁面可能調(diào)用的插件種類。
  • report-uri指定瀏覽器在違反內(nèi)容安全策略時(shí)發(fā)送報(bào)告的URL俊柔。此指令不能在<meta>標(biāo)簽中使用筹麸。
  • style-src是script-src樣式表的對應(yīng)物。
  • upgrade-insecure-requests指示用戶代理重寫URL方案雏婶,將HTTP更改為HTTPS物赶。此指令適用于需要重寫的大量舊URL的網(wǎng)站。

默認(rèn)情況下留晚,指令是廣泛的酵紫。如果您沒有為指令設(shè)置特定的策略font-src,那么那么該指令的默認(rèn)行為就像您指定*為有效的源一樣(例如错维,您可以無限制地加載來自各地的字體)奖地。

您可以通過指定一個(gè)default-src指令來覆蓋此默認(rèn)行為。您可能懷疑赋焕,該指令定義了您未指定的大多數(shù)指令的默認(rèn)值参歹。一般來說,這適用于以任何指令為結(jié)尾-src隆判。如果default-src設(shè)置為https://example.com犬庇,并且您無法指定font-src指令,則可以從而https://example.com不是其他地方加載字體侨嘀。我們僅script-src在我們早期的例子中指定臭挽,這意味著可以從任何來源加載圖像,字體等咬腕。

以下指令不使用default-src作為備用欢峰。記住,不能設(shè)置它們與允許任何東西是一樣的。

  • base-uri
  • form-action
  • frame-ancestors
  • plugin-types
  • report-uri
  • sandbox

您可以使用盡可能少的這些指令對您的特定應(yīng)用程序是有意義的赤赊,只需在HTTP標(biāo)頭中列出每個(gè)指令闯狱,并使用分號分隔指令。您需要確保在單個(gè)指令中列出特定類型的所有必需資源抛计。如果寫了一些東西

script-src https://host1.com; script-src https://host2.com

第二個(gè)指令將被忽略哄孤。類似以下內(nèi)容將正確地將兩個(gè)起始位置指定為有效。

script-src https://host1.com https://host2.com

例如吹截,如果您有一個(gè)應(yīng)用程序從內(nèi)容傳送網(wǎng)絡(luò)(例如https://cdn.example.net)加載其所有資源瘦陈,并且知道您根本不需要框架內(nèi)容或任何插件,那么您的策略可能如下所示:

Content-Security-Policy: default-src https://cdn.example.net; child-src 'none'; object-src 'none'

實(shí)施細(xì)節(jié)

您將在網(wǎng)絡(luò)上的各種教程中看到X-WebKit-CSP和X-Content-Security-Policy標(biāo)題波俄。展望未來晨逝,您可以忽略這些前綴標(biāo)題。現(xiàn)代瀏覽器(IE除外)支持未標(biāo)記的Content-Security-Policy標(biāo)題懦铺。這是你應(yīng)該使用的標(biāo)題捉貌。

不管您使用的標(biāo)頭,策略是逐頁定義的:您需要發(fā)送HTTP標(biāo)頭以及您希望確保受保護(hù)的每個(gè)響應(yīng)冬念。這提供了很多靈活性趁窃,因?yàn)槟梢愿鶕?jù)具體需求對特定頁面的策略進(jìn)行微調(diào)。您網(wǎng)站中的一組網(wǎng)頁也許有一個(gè)+1按鈕急前,而另外一些則不需要:只有在必要時(shí)才可以加載按鈕代碼醒陆。

每個(gè)指令中的源列表是相當(dāng)靈活的。您可以通過scheme(data:裆针,https:)指定源刨摩,或者以hostname-only(example.com與該主機(jī)上的任何源相匹配的任何方案,任何端口)與完全限定的URI(https://example.com:443僅匹配HTTPS世吨,僅example.com與唯一端口443)澡刹。通配符被接受,但僅作為方案另假,端口或主機(jī)名的最左側(cè)位置:://.example.com:*將匹配任何端口上使用任何方案的example.com(但不是 example.com其本身)的所有子域像屋。

源列表中也接受了四個(gè)關(guān)鍵字:

  • 'none',你可能會期望边篮,什么也沒有己莺。
  • 'self' 匹配當(dāng)前來源,但不匹配其子域戈轿。
  • 'unsafe-inline' 允許內(nèi)聯(lián)JavaScript和CSS(稍后會詳細(xì)介紹一下)凌受。
  • 'unsafe-eval'允許文本到JavaScript的機(jī)制eval(我們也會得到這個(gè))。

這些關(guān)鍵字需要單引號思杯。script-src 'self'(帶引號)授權(quán)從當(dāng)前主機(jī)執(zhí)行JavaScript胜蛉。script-src self(沒有引號)允許來自名為“ self”(而不是當(dāng)前主機(jī))的服務(wù)器的JavaScript 挠进,這可能不是您的意思。

沙箱

還有一個(gè)更直接的值得談?wù)摚簊andbox誊册。這與我們所看到的其他人有所不同领突,而且頁面可以采取的行動限制,而不是頁面可以加載的資源案怯。如果sandbox指令存在君旦,因?yàn)殡m然它被裝載的內(nèi)頁將被視為iframe同一個(gè)sandbox屬性。這可以在頁面上產(chǎn)生廣泛的影響:強(qiáng)制頁面成為一個(gè)獨(dú)特的起源嘲碱,并防止表單提交等金砍。這超出了本文的范圍,但是您可以在HTML5規(guī)范“沙盒標(biāo)志集”部分找到有效沙箱屬性的完整詳細(xì)信息麦锯。

元標(biāo)記

CSP首選的傳遞機(jī)制是一個(gè)HTTP頭恕稠。但是,可以直接在標(biāo)記中在頁面上設(shè)置策略扶欣。使用具有http-equiv屬性的元標(biāo)記:

<meta http-equiv="Content-Security-Policy" content="default-src https://cdn.example.net; child-src 'none'; object-src 'none'">

這不能用于frame-ancestors鹅巍,report-uri或sandbox。

內(nèi)聯(lián)代碼被認(rèn)為有害

應(yīng)該清楚的是料祠,CSP基于白名單昆著,因?yàn)檫@是一個(gè)明確的方式來指示瀏覽器將特定的資源集合視為可接受的,并拒絕其余的术陶。但是,基于Origin的白名單并不能解決XSS攻擊造成的最大威脅:內(nèi)嵌腳本注入煤痕。如果攻擊者可以注入直接包含一些惡意的有效載荷(<script>sendMyDataToEvilDotCom();</script>)的腳本標(biāo)簽梧宫,則瀏覽器沒有任何機(jī)制可以將其與合法的內(nèi)聯(lián)腳本標(biāo)記區(qū)分開來。CSP通過完全禁止內(nèi)聯(lián)腳本來解決這個(gè)問題:這是唯一可以確定的方法摆碉。

此禁令不僅包括直接嵌入到script標(biāo)簽中的腳本塘匣,還包括內(nèi)聯(lián)事件處理程序和javascript:URL。您需要將script標(biāo)簽的內(nèi)容移動到外部文件中巷帝,并替換javascript:URL和<a ... onclick="[JAVASCRIPT]">適當(dāng)?shù)腶ddEventListener調(diào)用忌卤。例如,您可以從以下內(nèi)容重寫以下內(nèi)容:

<script> function doAmazingThings() { alert('YOU AM AMAZING!'); } </script> <button onclick='doAmazingThings();'>Am I amazing?</button>

更像是:

<script src='amazing.js'></script> <button id='amazing'>Am I amazing?</button>

// amazing.js function doAmazingThings() { alert('YOU AM AMAZING!'); } document.addEventListener('DOMContentReady', function () { document.getElementById('amazing') .addEventListener('click', doAmazingThings); });

重寫的代碼具有上述優(yōu)點(diǎn)楞泼,并且與CSP無關(guān)的許多優(yōu)點(diǎn); 這是最好的做法驰徊,不管你使用CSP。內(nèi)聯(lián)JavaScript將結(jié)構(gòu)和行為整合到不應(yīng)該的方式堕阔。瀏覽器緩存外部資源更容易棍厂,開發(fā)人員更易于理解,有利于編譯和分類超陆。如果您將代碼移植到外部資源中牺弹,您將編寫更好的代碼。

內(nèi)聯(lián)樣式以相同的方式處理:style屬性和style標(biāo)簽都應(yīng)整合到外部樣式表中,以防止CSS啟用的各種令人驚奇的巧妙數(shù)據(jù)exfiltration方法张漂。

如果你真的晶默,絕對必須有內(nèi)聯(lián)的腳本和風(fēng)格,你可以通過'unsafe-inline'在一個(gè)script-src或者style-src指令中添加一個(gè)允許的源來啟用它航攒。您也可以使用隨機(jī)數(shù)或有(見下文)磺陡。但請不要。禁止內(nèi)聯(lián)腳本是CSP提供的最大的安全勝利屎债,禁止內(nèi)聯(lián)樣式也會使您的應(yīng)用程序更加硬化仅政。在將所有代碼移出所有代碼之后,確保事情正常運(yùn)行盆驹,這是一個(gè)很大的努力圆丹,但這是一個(gè)非常值得的折中。

如果你絕對必須使用它...

CSP Level 2通過允許您使用加密隨機(jī)數(shù)(使用一次數(shù))或散列值將特定內(nèi)聯(lián)腳本列入白名單躯喇,為內(nèi)聯(lián)腳本提供向后兼容性辫封。雖然在實(shí)踐中這可能很麻煩,但它是有用的廉丽。

要使用隨機(jī)數(shù)倦微,請將腳本標(biāo)簽賦給一個(gè)nonce屬性。其值必須與受信任來源列表中的值相匹配正压。例如:

<script nonce=EDNnf03nceIOfn39fn3e9h3sdfa> // Some inline code I can't remove yet, but need to asap. </script>

現(xiàn)在欣福,將nonce添加到附加到nonce-關(guān)鍵字的script-src指令中。

Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'

請記住焦履,必須為每個(gè)頁面請求重新生成隨機(jī)數(shù)拓劝,并且它們必須是無法確定的。

哈希的工作方式大致相同嘉裤。不要在腳本標(biāo)簽中添加代碼郑临,而是創(chuàng)建腳本本身的SHA哈希值,并將其添加到script-src指令中屑宠。例如厢洞,假設(shè)您的頁面包含以下內(nèi)容:

<script>alert('Hello, world.');</script>

您的政策將包含以下內(nèi)容:

Content-Security-Policy: script-src 'sha256-qznLcsROx4GACP2dm0UCKCzCG-HiZ1guq6ZZDob_Tng='

這里有幾件事要注意。該sha*-前綴指定用于生成哈希的算法典奉。在上面的例子中躺翻,使用sha256-。CSP還支持sha384-和sha512-卫玖。當(dāng)生成哈希時(shí)不包括<script>標(biāo)簽获枝。資本化和空白也是重要的,包括領(lǐng)先或尾隨的空白骇笔。

Google搜索產(chǎn)生SHA哈希會導(dǎo)致您使用任何語言的解決方案省店。使用Chrome 40或更高版本嚣崭,您可以打開DevTools然后重新加載您的頁面∨嘲“控制臺”選項(xiàng)卡將包含每個(gè)內(nèi)聯(lián)腳本的正確sha256哈希的錯(cuò)誤消息雹舀。

評估太

即使攻擊者無法直接插入腳本,也可能會欺騙您的應(yīng)用程序?qū)⑵渌栊晕谋巨D(zhuǎn)換成可執(zhí)行JavaScript并代表她執(zhí)行粗俱。eval()说榆,new Function(),setTimeout([string], ...)寸认,and setInterval([string], ...)是通過注射文本最終可能會執(zhí)行一些意外的惡意所有矢量签财。CSP對這種風(fēng)險(xiǎn)的默認(rèn)回應(yīng)是毫不奇怪的是完全阻止所有這些向量。

這對構(gòu)建應(yīng)用程序的方式有以下幾個(gè)方面的影響:

  • 通過內(nèi)置解析JSON JSON.parse偏塞,而不是依靠eval唱蒸。自IE8以來每個(gè)瀏覽器都提供原生JSON操作灸叼,而且它們完全安全神汹。
  • 使用內(nèi)聯(lián)函數(shù)而不是字符串重寫您正在進(jìn)行的任何setTimeout或setInterval調(diào)用。例如:

setTimeout("document.querySelector('a').style.display = 'none';", 10);

會寫得更好:

setTimeout(function () { document.querySelector('a').style.display = 'none'; }, 10);

  • 在運(yùn)行時(shí)避免內(nèi)嵌模板:許多模板庫可以new Function()自由地使用古今,以加速運(yùn)行時(shí)的模板生成屁魏。這是動態(tài)規(guī)劃的一個(gè)很好的應(yīng)用,但是有可能評估惡意文本捉腥。一些框架支持CSP開箱即用氓拼,在沒有的情況下回歸到一個(gè)強(qiáng)大的解析器eval; AngularJS的ng-csp指令是一個(gè)很好的例子。

然而抵碟,如果您選擇的模板語言提供預(yù)編譯(例如Handlebars)披诗,那么您甚至更好。預(yù)編譯您的模板可以使用戶體驗(yàn)甚至比最快的運(yùn)行時(shí)實(shí)現(xiàn)速度更快立磁,而且更安全。贏剥槐,贏唱歧!如果eval及其文本到JavaScript的兄弟對您的應(yīng)用程序完全至關(guān)重要,您可以通過'unsafe-eval'在script-src指令中添加允許的源來啟用它們粒竖。但是颅崩,再一次請不要。禁止執(zhí)行字符串的能力使得攻擊者在您的站點(diǎn)上執(zhí)行未經(jīng)授權(quán)的代碼更加困難蕊苗。

報(bào)告

CSP阻止客戶端不受信任的資源的能力對用戶來說是一個(gè)巨大的勝利沿后,但是將某種通知發(fā)送回服務(wù)器是非常有幫助的,以便您可以識別和壓縮任何可以在第一名朽砰。為此尖滚,您可以指示瀏覽器將POSTJSON格式的違規(guī)報(bào)告指定到report-uri指令中指定的位置喉刘。

Content-Security-Policy: default-src 'self'; ...; report-uri /my_amazing_csp_report_parser;

這些報(bào)告將如下所示:

{ "csp-report": { "document-uri": "http://example.org/page.html", "referrer": "http://evil.example.com/", "blocked-uri": "http://evil.example.com/evil.js", "violated-directive": "script-src 'self' https://apis.google.com", "original-policy": "script-src 'self' https://apis.google.com; report-uri http://example.org/my_amazing_csp_report_parser" } }

它包含一大批信息,可幫助您跟蹤違規(guī)行為的具體原因漆弄,包括違規(guī)發(fā)生的頁面(document-uri)睦裳,該頁面的引薦來源(引薦來源,請注意該密鑰未拼寫錯(cuò)誤)撼唾,違反的資源頁面的policy(blocked-uri)廉邑,它違反的具體指令(violated-directive)以及頁面的完整策略(original-policy)。

報(bào)告 - 僅

如果您剛剛開始使用CSP倒谷,在為用戶推出惡劣政策之前蛛蒙,先評估應(yīng)用程序的當(dāng)前狀態(tài)是有意義的。作為完全部署的墊腳石渤愁,您可以要求瀏覽器監(jiān)控策略牵祟,報(bào)告違規(guī)行為,但不執(zhí)行限制猴伶。而不是發(fā)送Content-Security-Policy頭课舍,發(fā)送Content-Security-Policy-Report-Only頭。

Content-Security-Policy-Report-Only: default-src 'self'; ...; report-uri /my_amazing_csp_report_parser;

僅在報(bào)告模式下指定的策略將不會阻止受限制的資源他挎,但會將違規(guī)報(bào)告發(fā)送到您指定的位置玲躯。您甚至可以發(fā)送兩個(gè)頭文件,執(zhí)行一個(gè)策略同時(shí)監(jiān)視另一個(gè)策略辣之。這是評估更改應(yīng)用程序CSP的效果的好方法:打開新策略的報(bào)告垢箕,監(jiān)視違規(guī)報(bào)告并修復(fù)發(fā)生的任何錯(cuò)誤,然后在滿足其效果后開始執(zhí)行新策略呢撞。

現(xiàn)實(shí)世界的使用

CSP 1在Chrome损姜,Safari和Firefox中非常有用,并且在IE 10中有非常有限的支持殊霞。您可以在caniuse.com上查看詳細(xì)信息摧阅。CSP 2級在Chrome版本40中可用。大規(guī)模網(wǎng)站(如Twitter和Facebook)部署了標(biāo)題(Twitter的案例研究值得一讀)绷蹲,該標(biāo)準(zhǔn)已經(jīng)準(zhǔn)備好開始在自己的站點(diǎn)上部署棒卷。

為您的應(yīng)用制定策略的第一步是評估您實(shí)際加載的資源。一旦您認(rèn)為您已經(jīng)掌握了應(yīng)用程序中的內(nèi)容祝钢,請根據(jù)這些要求設(shè)置策略比规。我們來看幾個(gè)常見的用例,并確定我們?nèi)绾巫詈玫卦贑SP的保護(hù)范圍內(nèi)支持它們:

使用案例#1:社交媒體小部件

  • 谷歌的+1按鈕拦英,包括腳本https://apis.google.com蜒什,并嵌入了一個(gè)iframe從https://plusone.google.com。您需要一個(gè)包含這兩個(gè)起源的策略才能嵌入該按鈕疤估。最低限度的政策是script-src https://apis.google.com; child-src https://plusone.google.com灾常。您還需要確保Google提供的JavaScript代碼段被拉出到外部JavaScript文件中霎冯。如果您有一個(gè)使用child-src的現(xiàn)有策略,則需要將其更改為child-src岗憋。
  • Facebook的Like按鈕有許多實(shí)現(xiàn)選項(xiàng)肃晚。我建議堅(jiān)持使用iframe版本,因?yàn)樗梢园踩貜哪W(wǎng)站的其余部分沙箱仔戈。這將需要一個(gè)child-src https://facebook.com指令才能正常運(yùn)行关串。請注意,默認(rèn)情況下监徘,iframe代碼Facebook提供加載相對URL //facebook.com晋修。請更改明確指定HTTPS: https://facebook.com。沒有理由使用HTTP凰盔,如果你不必墓卦。
  • Twitter的Tweet按鈕依賴于訪問腳本和框架,兩者均托管在https://platform.twitter.com(Twitter同樣在默認(rèn)情況下提供相對URL:請?jiān)诒镜貜?fù)制/粘貼時(shí)編輯代碼以指定HTTPS)户敬。script-src https://platform.twitter.com; child-src https://platform.twitter.com只要您將JavaScript代碼段提供給外部JavaScript文件落剪,您就可以完成設(shè)置。
  • 其他平臺也將有類似的要求尿庐,并且可以同樣的解決忠怖。我建議剛設(shè)置default-src的'none',看您的控制臺抄瑟,以確定您需要啟用使部件工作的資源凡泣。

包括多個(gè)小部件是簡單的:簡單地組合策略指令,記住將單個(gè)類型的所有資源合并到單個(gè)指令中皮假。如果你想要所有這三個(gè)鞋拟,這個(gè)政策看起來就像:

script-src https://apis.google.com https://platform.twitter.com; child-src https://plusone.google.com https://facebook.com https://platform.twitter.com

使用案例#2:鎖定

假設(shè)您運(yùn)行銀行網(wǎng)站一段時(shí)間,并希望確保只有您自己編寫的資源才能加載惹资。在這種情況下贺纲,從默認(rèn)策略開始,絕對阻止一切(default-src 'none')褪测,并從那里構(gòu)建猴誊。

假設(shè)銀行從CDN載入所有圖像,樣式和腳本https://cdn.mybank.net汰扭,并通過XHR連接https://api.mybank.com/以將各種數(shù)據(jù)下拉。使用框架福铅,但僅適用于網(wǎng)站本地的頁面(無第三方起源)萝毛。網(wǎng)站上沒有Flash,沒有字體滑黔,沒有任何東西笆包。在這種情況下我們可以發(fā)送的最嚴(yán)格的CSP頭是:

Content-Security-Policy: default-src 'none'; script-src https://cdn.mybank.net; style-src https://cdn.mybank.net; img-src https://cdn.mybank.net; connect-src https://api.mybank.com; child-src 'self'

使用案例#3:僅SSL

一個(gè)結(jié)婚戒指論壇管理員希望確保所有資源只通過安全渠道加載环揽,但并沒有真正寫得太多的代碼; 重寫大塊的第三方論壇軟件,填補(bǔ)了內(nèi)線腳本和風(fēng)格的邊緣超出了他的能力庵佣。以下政策將有效:

Content-Security-Policy: default-src https:; script-src https: 'unsafe-inline'; style-src https: 'unsafe-inline'

即使https:指定了default-src歉胶,腳本和樣式指令也不會自動繼承該源。每個(gè)指令將完全覆蓋該特定類型資源的默認(rèn)值巴粪。

未來

內(nèi)容安全策略第2級是候選推薦通今。W3C Web應(yīng)用安全工作組沒有閑置,背部拍照; 工作已經(jīng)開始在規(guī)格下一次迭代肛根。下一個(gè)版本已經(jīng)在積極發(fā)展辫塌。

如果您對這些即將到來的功能的討論感興趣,請瀏覽public-webappsec @郵件列表存檔派哲,或加入自己臼氨。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芭届,隨后出現(xiàn)的幾起案子储矩,更是在濱河造成了極大的恐慌,老刑警劉巖褂乍,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件持隧,死亡現(xiàn)場離奇詭異,居然都是意外死亡树叽,警方通過查閱死者的電腦和手機(jī)舆蝴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來题诵,“玉大人洁仗,你說我怎么就攤上這事⌒远В” “怎么了赠潦?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長草冈。 經(jīng)常有香客問我她奥,道長,這世上最難降的妖魔是什么怎棱? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任哩俭,我火速辦了婚禮,結(jié)果婚禮上拳恋,老公的妹妹穿的比我還像新娘凡资。我一直安慰自己,他們只是感情好谬运,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布隙赁。 她就那樣靜靜地躺著垦藏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伞访。 梳的紋絲不亂的頭發(fā)上掂骏,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音厚掷,去河邊找鬼弟灼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蝗肪,可吹牛的內(nèi)容都是我干的袜爪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼薛闪,長吁一口氣:“原來是場噩夢啊……” “哼辛馆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起豁延,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤昙篙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后诱咏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苔可,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年袋狞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焚辅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苟鸯,死狀恐怖同蜻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情早处,我是刑警寧澤湾蔓,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站砌梆,受9級特大地震影響默责,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咸包,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一桃序、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烂瘫,春花似錦媒熊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至温算,卻和暖如春怜校,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背注竿。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工茄茁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巩割。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓裙顽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宣谈。 傳聞我的和親對象是個(gè)殘疾皇子愈犹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容