我敢肯定的是,這個問題的答案是沒有,但我似乎無法找到一種方法,簡單地轉化<
和>
到<
和>
不能完全反映塊和持久性XSS。轉義< and >足以阻止XSS攻擊嗎?
我不是在談論CSRF。
如果這不阻止XSS,你能提供一個如何繞過這個防禦的例子嗎?
我敢肯定的是,這個問題的答案是沒有,但我似乎無法找到一種方法,簡單地轉化<
和>
到<
和>
不能完全反映塊和持久性XSS。轉義< and >足以阻止XSS攻擊嗎?
我不是在談論CSRF。
如果這不阻止XSS,你能提供一個如何繞過這個防禦的例子嗎?
在屬性中使用不受信任的字符串時(引用"
),您需要將"
轉義爲"
。
否則,你可以很容易地注入JavaScript。例如,<a href="{{str}}">
與str
是例如" onmouseover='something-evil'"
。
並非所有XSS攻擊都包括<或>,這取決於數據的插入位置。
感謝您的回覆和鏈接! – 2011-04-17 23:18:36
不,這還不夠。請記住,XSS不僅僅是HTML中的不可信數據,您還可以在JavaScript和CSS中找到它。考慮一下這種情況,比如「var myVar = [input];」你可以用這個[輸入]值做任何類型的惡意事情,而不用走近尖括號。在XSS備忘單中有更多的例子:http://ha.ckers.org/xss.html
你已經在標籤中提到了ASP.NET;你想要看的是[AntiXSS library][1]
。抓住這一點,並使用適當的輸出編碼:
Encoder.CssEncode()
Encoder.HtmlEncode()
Encoder.HtmlAttributeEncode()
Encoder.JavaScriptEncode()
等等等等。絕對沒有理由嘗試在.NET中做自己的字符替換。
號下面是兩個例子,其中逸出<
,>
,'
,"
和&
是不夠的:
實施例1:
<a href="{{myUrl}}">
XSS攻擊:
myUrl = "javascript:alert(1)"
例2:
<script>var page = {{myVar}};</script>
XSS攻擊:
myVar = "1;alert(1)"
,從而防止攻擊的方式參見https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet。
如果您使用的是AngularJS,這不僅適用? – michaelsnowden 2015-06-25 00:39:20
@michaelsnowden我在示例中使用了{{}}語法,但是任何模板庫都可能容易受到這些攻擊 – priomsrb 2015-06-25 00:54:33
在後一種情況下,使用URL編碼,而不是HTML實體;在這種情況下''''變成了'%22' – 2011-04-17 21:07:30
你不能只對一個*整個* URL進行URL編碼,因爲這也會中斷查詢字符串 – ThiefMaster 2011-04-17 21:22:06
啊,所以轉義「,<, and >會阻止簡單的響應。寫入(輸入)隱藏,但如果我有一個現有的腳本塊或用直接用戶輸入構建DOM元素,其中< and >不是輸入運行所必需的,我仍然是脆弱的。 – 2011-04-17 22:12:06