在閱讀ASP.NET request validation causes: is there a list?後關於什麼導致ASP.NET抱怨危險的投入,我決定編寫自己的正則表達式在RegularExpressionValidator中使用。爲什麼此ASP.NET RegularExpressionValidator驗證危險的HTML不起作用?
我創建了測試點2和3特拉維斯的接受的答案正則表達式...
- 2 - 如果
&
字符在&#
序列(例如, 
對非破空間),這是一個「危險的字符串」。- 3 - 如果
<
字符是<x
部分(其中 「x」 是任何字母字符A-Z),<!
,</
,或<?
,這是一個 「危險的字符串」。
^()(&#)+ |(< [!?A-ZA-Z/\])+()$
這似乎工作的偉大使用regexlib.com上的測試儀,因爲它匹配你所期望的所有東西,而且你不會。
但是當我使用的表達上的ASP.NET的RegularExpressionValidator驗證大火上任何文字的!它在Firefox或IE上也是如此,無論EnableClientScript是true還是false。我使用.NET 4.5.1,但我不認爲這有什麼區別。 任何想法爲什麼以及如何解決它或爲什麼它不工作?
我不確定你的意圖,不管你是隻是作爲一個練習來寫這個,還是你想在你的應用程序中使用它,但我建議允許HTML輸入,並集中精力編碼輸出有必要的。如果輸出不正確,「危險HTML」只是危險的。請參閱[OWASP XSS備忘單](https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet)瞭解更多信息。 – SilverlightFox
我不知道我是否看錯了,我試圖讓「安全」的輸入,但驗證器匹配「不安全」的輸入,所以即使匹配的工作,它會精確地匹配我想要的相反? –
在ASP.NET中,如果用戶試圖提交表單並且可能存在潛在的危險輸入,則會引發HttpRequestValidationException。您可以通過關閉請求驗證來阻止這種情況的發生,但我不想繞過請求驗證(因爲這是安全性的重要組成部分),所以我需要一種優雅的方式來處理請求驗證失敗的最常見方式,以便用戶可以糾正輸入而不是其他任何事情。我可以寫一個自定義驗證器來做到這一點,但我認爲一個正則表達式會更好。 –