2013-02-22 64 views
4

用戶可以在文本框中格式化他們的html。然後將其發送到後端進行驗證。其他用戶可能會看到這個文本框。如何檢查C#中的任何html <script>標記,以及其他任何令人討厭的內容?

我想檢查後端的任何標籤。我知道這可以用一個相對簡單的正則表達式來完成。我只想做一些像<\s*?script\s*?>

我的問題,雖然是如果有人做這樣的事情:

<a href="http://example.com" onClick="alert(1);">test</a> 

這將通過驗證。我也可以對onClick進行正則表達式檢查,但我相信還有其他解決方法。

我的問題:有沒有一種很好的方法來做到這一點?我只需要依靠正則表達式和我自己的研究來找出他們可以如何運行腳本?

編輯

我想我可以創造什麼,他們可以進入白名單。這主要是爲了格式化文本,所以<b>, <i>, <h>等。這可能或可能不是一個可接受的解決方案,但我需要看看,看看實際的用例是什麼。我希望有一個不同的解決方案。

+1

移除所有的HTML標籤創建的JS功能的陣列,然後通過函數解析HTML檢查許多「封鎖」的關鍵字 – 2013-02-22 15:08:07

+0

之一是否需要用戶輸入_any_ html? – Magnus 2013-02-22 15:08:54

+0

不知道這是否可能是你問的問題,但可能值得檢查:http://stackoverflow.com/questions/4683907/asp-net-mvc-validation-of-script-tags和http:/ /wpl.codeplex.com/它可能仍然是相關的,因爲你正在處理HTML中的JavaScript。 – 2013-02-22 15:08:57

回答

4

真的,您應該使用白名單驗證(即只允許您知道安全的特定示例),而不是嘗試檢測並刪除潛在的危險輸入。

一個非常好的方法是使用Markdown,而不僅僅是允許HTML輸入。

還有OWASP Guidelines for HTML injection

+0

我同意白名單。下面是一個C#庫,它可能對解析HTML有用,以便清理它:http://htmlagilitypack.codeplex.com/ – 2013-02-22 15:13:37

+0

所以我在想更多關於這個。白名單如何應對等攻擊。 IMG和SRC都將在白名單上,所以這將通過。 – user1652427 2013-02-22 16:25:31

+0

是否有任何瀏覽器在src標籤中執行JavaScript? http://jsfiddle.net/bKMjs/ – Fenton 2013-02-22 17:26:58

-1

一個簡單的從內容

public string Strip(string text) 
{ 
    return Regex.Replace(text, @」<(.|\n)*?>」, string.Empty); 
} 
+0

我不想刪除所有HTML標記。用戶應該能夠使文本加粗,斜體等。我只是不希望他們能夠執行腳本。 – user1652427 2013-02-22 15:19:31

+0

然後使用這個正則表達式去除javascript標籤**「