2
我們有一個ASP.NET自定義控件,允許用戶輸入HTML(類似於Rich文本框)。我們注意到用戶可能會在HTML視圖中的<script>
標記內注入惡意客戶端腳本。我可以在保存時驗證HTML代碼,以確保刪除任何<script>
元素。防止以HTML格式保存惡意客戶端腳本的最佳做法
這是我需要做的嗎? <script>
標籤以外的所有其他標籤是否安全?如果你是攻擊者,你還會嘗試做什麼?
我需要遵循的任何最佳實踐?
編輯 - 爲我的目的,MS Anti Xss庫與本地HtmlEncode不同?
絕對使用一個實現瞭解析+白名單方法的現有庫!除了僅允許列入白名單的標籤和屬性之外,您還需要確保該庫在不同瀏覽器的HTML解析中處理怪癖!例如,退格字符可能會導致解析器跳過一些HTML而不是標籤,但瀏覽器可能會將其解釋爲'
僅刪除
<script>
標記將不足以滿足輸入中編碼/隱藏它們的許多方法。大多數語言現在都具有用於過濾輸入的反xss和反csrf庫和函數。您應該使用這些通用商定的庫之一來過濾用戶輸入。我不知道什麼是最好的選擇是在ASP.NET,但是這可能會提供一些線索: http://msdn.microsoft.com/en-us/library/ms998274.aspx
來源
2009-12-31 19:14:09
看一看這個頁面:
http://ha.ckers.org/xss.html
得到一個人可能會嘗試的不同XSS攻擊的想法。
來源
2009-12-31 19:16:50 Oli
這叫做Cross Site Scripting (XSS) attack。他們可能很難預防,因爲執行JavaScript代碼有很多令人驚訝的方法(
javascript:
URL,有時CSS,object
和iframe
標籤等)。最好的方法是將網址的標籤,屬性和類型列入白名單(並儘可能小地保留白名單以滿足您的需求)而不是列入黑名單。這意味着你只允許某些你知道安全的標籤,而不是禁止你認爲有危險的標籤。通過這種方式,人們可以以更少的方式攻擊您的系統,因爲您沒有考慮過的標記將不被允許,而不是被列入黑名單,如果您錯過了某些內容,您仍然存在漏洞。 Here's an example清潔白名單的方法。
來源
2009-12-31 19:17:39
是否有示例我可以使用的白名單標籤和屬性? – Nick 2009-12-31 20:15:21
你看過我鏈接的例子嗎?它有一個可列入白名單的標籤和屬性示例列表。 – 2010-01-03 17:41:20
從HTML中濾除JavaScript時有很多事要做。以下是一些較大分數的簡短列表:
<scr<script></script>ipt>alert("XSS!");</scr<script></script>ipt>
之類的內容會從您的字符串中移除<script>
標記後過時,因此您將創建一個新的標記。javascript:
協議的href
和src
屬性。onmouseover/out
,onclick
,0onkeypress
等這是一個更完整的cheat sheet。此外,Oli鏈接到一個很好的文章ha.ckers.org與樣品來測試你的過濾。
來源
2009-12-31 19:46:10