2012-05-19 41 views
1

我們假設我有一個配置文件頁面,其中顯示了DropDown,1個Admin用戶可以更改不同用戶的角色。預防Firebug中的HTML更改

如:

2 - Admin 
3 - Member 

假設1SuperAdmin。如果我們在Asp.Net中有一個DropDownList,並將它綁定到代碼後面的數據源,然後神祕地嘗試更改DropDownList中的值,然後提交表單,我們會得到例外,因爲EventValidation。然而,在Asp.Net MVC中,如果我們編輯它肯定是因爲它包含了網頁。有什麼我可以做的,以防止我的Web應用程序中的這種交叉事物?

我可以做的一件事是檢查表單是否發佈,以查看發佈的值是2還是3,如果不顯示「您是否想要破解」等消息。有沒有更好的選擇?

+1

這個聲明意味着什麼:「然而在Asp.Net MVC中,如果我們編輯它肯定是因爲它包含了網頁。」?如果你試圖暗示ASP.NET MVC沒有提供服務器端驗證的機制,那麼你是不正確的。您應該根據應用程序的業務規則來確認輸入服務器端。即使有人手動將POST發送到您的應用程序,並且完全不使用您提供的UI,您應該檢查它們發送的內容是否有效。 – David

+0

@David:通過使用ModelState.IsValid或Page.IsValid非常容易檢查服務器。但是,當我們編輯非常好的下拉列表中的任何值時,Asp.Net webforms異常會觸發。但在Asp.Net MVC由於缺乏viewstate一切正常。我想我需要在服務器上驗證這樣的事情,並且非常嚴格,但我只是想說Asp.Net webforms提供了一些額外的安全性。這可能是由於ViewState。 –

+1

它提供的內容不是以任何方式「增加安全性」。我明白你在說什麼,基本上這意味着Web Forms中的機制試圖從開發人員中混淆Web的本質。但我認爲,這有助於建立一種安全的Web應用程序而不是更安全的應用程序。基本規則是,應該在服務器端驗證_all_用戶輸入。 _總是_。 – David

回答

1

您提到的解決方案(檢查服務器)是防止此類網站遭受任何形式攻擊的正確解決方案。
使用螢火蟲不是唯一的選擇「欺騙」基於JavaScript的驗證。它也可以用任何基本的嗅探器工具完成,比如fiddler,它可以幫助潛在的黑客分析發佈的數據到你的網站,以他希望的任何方式改變它,然後使用瀏覽器再次發佈它,或者他自己的網絡工具。
我通常在所有場景中都使用驗證(腳本和服務器端),而在我看來,客戶端驗證的主要目的是防止回送到服務器(這會使普通用戶感到厭煩)告訴客戶端,他做錯了什麼。
但是,這樣的驗證永遠不可能足夠安全以保證數據在服務器上自動受信任,因爲它很容易修改javascript /發佈的數據以覆蓋它們。

編輯
繼UnhandleException的resposne:
在MVC specificly,您可以使用數據標註屬性,使MVC引擎渲染的客戶端和服務器端驗證ü
This tutorial explains how do use the attributes validation in ur mvc apps

1

不要依賴客戶端驗證。爲每個輸入構建一個驗證器。將這組驗證器放在應用程序的服務器端。如果客戶端有驗證器,請確保在服務器端也使用相同的驗證器。

這裏輸入意味着基於URL的參數,基於表單的參數,隱藏字段,餅乾等。