資安JAVA(七):網頁內容安全政策(CSP)

來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 7 – CONTENT SECURITY POLICY
作者:John Melton
內文:
Please follow our rule.
What is it and why should I care?

網頁內容安全政策(CSP)是 Mozilla 推出最新的技術,在網頁應用程式多加上一層保護。可以阻擋 XSS 的攻擊和 點擊綁架 。XSS是很複雜的議題,OWASP防禦守則針對一般XSS和DOM的XSS。CSP 能夠幫助開發者解決XSS。

Whitelist Content Locations 網頁內容網址的白名單
XSS如此嚴重的原因是,瀏覽器會主動相信伺服器端傳來的內容。即使這些網頁被修改過或從來自意料之外的網址。CSP主要是針對這些問題,讓開發者可以透過CSP制定網頁內容網址的白名單

No Inline Scripts 禁止指令碼
攻擊者將指令碼加入到網頁內容中是導致XSS的原因。一般而言,瀏覽器無法分辨網頁內容是否完全來自於網站,或是者植來自攻擊入的內容。CSP可以隔離內容和程式碼以避免XSS。這表示,你必須限制所有指令碼只放在外部檔案。要達成這樣的效果,需要花點心力(Twitter的網站是個使用CSP的好範例)。

CSP的用意在於,讓攻擊者滿足三個條件才能XSS
第一步,插入一段惡意指令碼到你的網頁。
第二步,惡意指令碼掛到你的受信任白名單中的來源網站。
第三步,控制該受信任的網站。

制定CSP,讓XSS攻擊更加困難。
註:有人問CSP會影響到事件觸發函式嗎?答案是不會,不論 onAction handler 或 ddEventListener 都不會被影響。

No Code From Strings (eval dies) 字串中不允許任何程式碼 (去死吧 eval)
另一個熱門的方法是禁止任何字串中產生程式碼。這表示邪惡的 eval() 不能用。利用字串產生程式碼是常見的攻擊技巧且很難追蹤,禁止使用類似的函式能幫很多忙。

這個技巧,常見的問題是 JSON的解析要如何不透過eval(()進行?  從安全角度而言,解析JSON就應當使用原本的方式而不要用 eval()php範例jquery範例

Policy Violation Reporting 政策違規報表
CSP另一個很酷的特色是你可以設定政策違規報表,其包含兩種模式─產生報表或執行政策模式。前者可以記錄在你的站上所有違反政策的事件(適合用來測試),後者則除了產生報表,同時阻擋所有違規事件。你可以利用後者當作簡單的XSS偵測工具。

What should I do about it? 

你應該馬上使用CSP,這方法似乎沒有缺點。他是用來保護你的網站,而且這個方法是運行於後端伺服器,就算使用者瀏覽器不支援也沒關西。大致上,CSP的步驟如下:

第一步,使用你的標準安全研發實例,改善XSS。
第二步,閱讀CSP的手冊。
第三步,修改你的網站,並且不斷測試。
第四步,開啟報表模式,監控違規事件,並持續修改。
第五步,當一切都穩定下來,開啟執行政策模式。

目前實作方式有兩種: HTTP表頭和 META標籤。作者推薦前者,以下是範例。
Content-Security-Policy: default-src 'self';
img-src *;
object-src media1.example.com media2.example.com *.cdn.example.com;
script-src trustedscripts.example.com;
report-uri http://example.com/post-csp-report

第一行,預設只允許網頁內容來自網站本身。
第二行,允許來自任何網站的圖片。
第三行,允許來自特定網站的物件。
第四行,允許來自特定網站的指令碼。
第五行,將違規事件的報告傳送到特定網站。

CSP 有趣且好用,趕快加入到你的工具庫吧!

———–———–
資安Java: 上一篇 || 下一篇
———–———–

留言

這個網誌中的熱門文章

資安JAVA(十):X-Content-Type-Options

資安JAVA(十一):X-XSS-Protection

資安JAVA(四):Session Cookie HTTPOnly Flag