2013-07-02 45 views
3

是否有任何內置支持來驗證Web API中的惡意輸入,類似於使用MVC的表單?Xss支持 - ASP.Net web api

如果沒有,任何人都可以建議一個「全球」過濾器/消息inpector /無論是否對惡意輸入進行驗證?我試圖避免單獨驗證所有模型/參數...

+0

你在ASP.NET MVC中引用了什麼樣的惡意驗證輸入?它是反固定標記驗證嗎? –

+0

ValidateInput屬性和底層asp.net基礎設施爲此做了... – drogon

回答

6

不,我不相信有這樣的支持。這是爲什麼。 Web Forms/MVC的輸入驗證支持是一種權宜之計。但編碼輸出是更好的XSS修復;驗證輸入並不完美,因爲輸入是「壞」取決於您將如何輸出它(作爲HTML源元素的一部分,作爲JS源的一部分,在HTML屬性值中作爲SQL查詢的一部分等)。

因此,我建議不要將通用的全局輸入驗證作爲解決XSS問題的方法。相反,確保在輸出之前始終正確編碼輸入(或將其傳遞到另一個層,例如SQL DB)。對於輸出,如果您使用正常的Web API機制來返回數據(帶有內容協商/格式化程序的模型類),則格式化程序應該爲您處理特定於內容類型的編碼。

+1

感謝您的回答。那麼,這是不幸的。 web api和mvc之間的差距可能令人沮喪,因爲它們有很多相似之處。雖然全球輸入驗證可能不是所有情況下的最佳解決方案,但我敢打賭,這將是大多數應用程序的首選解決方案。根本沒有提供任何解決方案似乎像一個警察:) – drogon

5

我相信XSS與ASP.NET Web API不相關。這是我爲什麼這麼認爲的原因。假設在請求正文中,假設我得到了一個類似"input": "<script>alert('hello');</script>"的JSON,並且Web API將綁定到某個屬性的「輸入」原樣存儲到數據庫中,並在隨後的GET請求中將其原樣檢索併發送關閉給客戶,這還是可以的。客戶有責任確保這些數據正確轉義。所以,當這個輸入屬性被序列化爲一個Web應用程序時,在它寫入瀏覽器之前,客戶端Web應用程序必須進行HTML編碼。這樣做的Web API通常沒有意義,因爲Web API可以被其他客戶端使用,說一個WPF應用程序,其中XSS可能不適用。或者我錯過了你想到的任何具體案例?

0

爲什麼不使用HttpUtility.HtmlEncode

+2

對,但這是一個全球性的解決方案嗎?我仍然需要在每個字符串屬性上調用HtmlEncode。 – drogon

0

輸入應該總是被驗證。無論它走到哪裏都無所謂。名稱字段應該返回一個名稱字符串,而不是一個jpeg文件,或者例如根據您的環境SQL攻擊。

+0

請檢查此[URL](http://stackoverflow.com/help)它將有助於提高您的內容質量 –

+0

它絕對應該驗證。但是,缺少的是框架中的基線xss驗證。開發人員必須在代碼中重複執行此操作。 – drogon