我們有一個插頁式廣告頁面,當人們離開我們的網站時會發出警告。問題在於它需要查詢字符串參數並且盲目地生成一個頁面,因此它容易受到XSS攻擊。我一直負責解決這個問題,我想正確地做。C#/ ASP.NET中有一種簡單的方法來驗證用戶輸入是防止XSS攻擊的URL嗎?
1
A
回答
2
是的,試試這個:
if(Uri.IsWellFormedUriString(url, UriKind.Absolute) && url.StartsWith("http"))
Response.Write(string.Format("<a href=\"{0}\">{0}</a>",
HttpUtility.HtmlEncode(url)));
3
你應該叫Server.HtmlEncode
正常逃脫你生成的HTML。
1
所以事情不是要做;
- 使用正則表達式
- 使用的HTMLEncode沒有思想。
要做的事情;
- 將所有輸入視爲不可信。
- 在輸出之前對輸入進行編碼。但是請確保您使用正確的編碼類型。如果你把用戶輸入放在一個屬性中,那麼你使用HtmlAttributeEncode,如果它只是HTML,那麼你使用HtmlEncode,如果你把它放到JavaScript中,那麼它就是JavaScriptEncode。如果你的JavaScript把它放入一個div,那麼它是HtmlEncode,然後是JavaScriptEncode。
- 考慮使用AntiXSS,它提供了更多的編碼機制,並使用安全列表方法,這種方法本質上更安全。
- 將退出網址列入白名單,以便用戶不能將此頁面用作開放引薦來源網址。沒有一個帶有URL的參數,而是有一個GUID,它從數據庫,會話表或其他任何地方查找URL。
(披露:我自己AntiXSS)
1
最好的辦法是完全刪除頁面,只是接受了一個網站,並使其像一個網站。網站鏈接到其他資源,這就是爲什麼網站有超過2億個網站,而不是一打。
如果失敗了,最好的辦法是先用HtmlEncoding 作爲快速修復,然後將其替換爲帶有一個ID的查找,以便將其帶到不同的站點。
但是,真的,那些「你要離開的ZOMG!」網頁是可怕的。它們比爲每個所謂的「外部」鏈接打開新標籤的網站都要糟糕。
+0
該網頁的目的不是讓人們停留在網站上,而是提供一個普遍的免責聲明,即該網站是作爲信息資源提供的,而不一定是我們支持,認可或附屬的網站。企業只是想保護它的形象和聲譽,因爲它的很多成分都不那麼明亮。不幸的是,這個頁面在我們不知情的情況下由內容管理人員實施和部署,後來才被PCI審計所採用。所以現在我們有成千上萬的資源在使用它,並且我的任務是修復XSS漏洞。 – MyItchyChin 2010-10-18 16:09:42
相關問題
- 1. 防止WCF調用中的XSS攻擊
- 2. Json.Net Wrapper防止Xss攻擊
- 3. angularjs防止XSS攻擊
- 4. 防止SQL注入和XSS攻擊
- 5. 防止Magento中的XSS攻擊
- 6. 預防XSS攻擊的新方法
- 7. str_replace的這種用法足以防止SQL注入攻擊嗎?
- 8. HTML編碼能夠防止各種XSS攻擊嗎?
- 9. 防止輸入型攻擊
- 10. URL中的XSS攻擊
- 11. 防止PHP中的URL編碼XSS攻擊
- 12. XSS攻擊防範
- 13. XSS攻擊防護
- 14. 輸出用戶輸入 - 防止xss
- 15. 使用PHP來防止圖像內的XSS攻擊
- 16. Java控制檯輸入驗證以防止DOS攻擊
- 17. PHP:如何完全防止XSS攻擊?
- 18. ZAP XSS攻擊嘗試修復輸入驗證但不工作?
- 19. 這是一個有效的XSS攻擊
- 20. pgdb防止注入攻擊嗎?
- 21. 在Laravel驗證用戶時防止暴力攻擊
- 22. 防止ASP.NET MVC中的CSRF攻擊
- 23. 防止MDX注入攻擊
- 24. 驗證用戶輸入的另一種方法
- 25. 存儲生成的HTML並防止Rails 3中的XSS攻擊
- 26. 防止XSLT生成的內容中的XSS(和其他攻擊)
- 27. ASP.NET MVC中的AntiForgeryToken是否可以防止所有CSRF攻擊?
- 28. 簡單的方法來驗證用戶在ASP.NET MVC沒有提供商
- 29. XSS攻擊ASP.NET網站
- 30. 使用Javascript的CreateElement時防止XSS攻擊
不幸的是「javascript:alert('hi')」返回true。 – MyItchyChin 2010-10-15 21:25:21
簡單的方案檢查不會消除。我編輯了我的答案。 – 2010-10-15 22:20:21