2014-03-06 46 views
0

我收到此消息時,我執行與查詢字符串中編碼的一些數據的職位。我瀏覽過這個網頁,所有的解決方案都是關閉驗證 - 這對我來說似乎很落後。我想要做的是修改查詢字符串,以便它不首先觸發驗證。有潛在危險的Request.QueryString - 如何防止不關閉安全功能

查詢字符串url編碼與此javascript:

var qs = 'i=' + id+ '&c=' + encodeURIComponent(c) + '&' + 'p=' + encodeURIComponent(p); 

「ID」只是一個整數,所以C和P參數都可能造成這種唯一的,而且他們都是URIencoded。

是什麼原因導致這個錯誤,並且什麼,除了URI編碼,我可以做些什麼來防止投訴? 我不喜歡關閉安全功能。駕駛時戴上安全帶是明智的。

回答

2

這是一個安全帶,只適用於沒有通過駕駛考試的人。如果輸出編碼正確,則「潛在危險」的查詢字符串值不再危險。

例如,如果字符"輸出到HTML該應編碼爲",或者如果字符'被輸出到的JavaScript那麼它應該被編碼爲\x27

ASP.NET請求驗證僅保護您的代碼,如果你沒有正確編碼輸出,而且它僅僅保護那些已經通過與索取的網站啓用驗證輸入值。任何其他來源的輸入(例如共享數據庫,其他應用程序或外部API)都不會通過請求驗證進行驗證。這就是爲什麼我會編寫代碼來處理正確的輸出編碼。如果stackoverflow.com阻止了潛在的危險輸入,那麼人們不可能在他們的帖子中編寫像這樣的代碼:<script>alert('example');</script>,但輸出編碼正確,因爲您可以看到這是安全的。

看看我的上ASP.NET Security(A3-跨站點腳本(XSS)部分)後。請參閱OWASP XSS Prevention Cheat Sheet

0

你說得對,最「修復」這告訴你關閉驗證,因此它是一種很難找到比其他東西。我認爲你將不得不關閉該請求,然後手動驗證它。據微軟稱,你可以像這樣的請求,將其禁用:

Request.Unvalidated("userInput"); // Validation bypassed 
Request.Unvalidated().Form["userInput"]; // Validation bypassed 

If you disable request validation, you must manually check the unvalidated user input for potentially dangerous input

看到這篇文章:http://msdn.microsoft.com/en-us/library/hh882339(v=vs.110).aspx

祝您好運!

1

的ASP.NET團隊不希望你依靠「RequestValidation」,所以它是確定將其關閉(這是一個柺杖,讓安全的錯覺,因爲它並不總是加快速度)。

對於信息爲什麼這行,哪些是你應該做的,而不是,看這個video開始11:10。我真的會推薦觀看整個視頻。