2011-01-13 44 views
0

我想阻止用戶使用非常相似的代碼這個進入一個文本框我呼籲故事內的任何<script>標籤:腳本標記的ASP.NET MVC驗證

if (ArticleToCreate.story.Contains("<script>") == true) 
       ModelState.AddModelError("Story", "No script tags allowed!"); 

不幸的是,這將不起作用因爲它正在尋找<script>,而不是尋找<script>some code</script>或者某些代碼。「

任何人都可以幫忙嗎? 我想使用與上面所示非常相似的代碼,而不是任何服務層或模型腳本。謝謝

+3

一般而言,嘗試使用自己的滾動解決方案來應對XSS攻擊幾乎不是一個好主意。一個簡單的解決方案就是對所有用戶輸入進行HTML編碼(無論如何你都應該這樣做,Razor會自動爲你做)。 – 2011-01-13 18:49:14

回答

0

你可以使用html編碼來獲得你要找的東西,像這樣。

<%:model.story%> < ---------這將幫助你,即時通訊假設你正在使用asp.net MVC 2如果沒有可以使用這樣的事情:

<%= Html.Encode(Model.story)%> < -----這是爲asp.net mvc,但這是服務器端驗證,你可以隨時添加你自己的客戶端驗證。

3

默認情況下,MVC不會允許這樣做。如果您明確允許(例如使用[ValidateInput(false)]),則需要使用類似Microsoft Web Protection Library的工具來清理輸入。

1

如果您需要允許用戶輸入一些HTML而不是任何HTML,我建議您調查Microsoft Web Protection Library,其中包括使用戶輸入的HTML片段「安全」的方法。

我同意Matt Greer的說法,試圖創建自己的識別非法標籤的解決方案是一個壞主意。有太多的攻擊媒介將腳本注入到HTML中,您將無法防範所有這些攻擊。 (請參閱此XSS Cheat Sheet進行抽樣,但已過時,因此可能會有更多。)