我們假設我有一個配置文件頁面,其中顯示了DropDown,1個Admin用戶可以更改不同用戶的角色。預防Firebug中的HTML更改
如:
2 - Admin
3 - Member
假設1
是SuperAdmin
。如果我們在Asp.Net中有一個DropDownList
,並將它綁定到代碼後面的數據源,然後神祕地嘗試更改DropDownList中的值,然後提交表單,我們會得到例外,因爲EventValidation
。然而,在Asp.Net MVC中,如果我們編輯它肯定是因爲它包含了網頁。有什麼我可以做的,以防止我的Web應用程序中的這種交叉事物?
我可以做的一件事是檢查表單是否發佈,以查看發佈的值是2還是3,如果不顯示「您是否想要破解」等消息。有沒有更好的選擇?
這個聲明意味着什麼:「然而在Asp.Net MVC中,如果我們編輯它肯定是因爲它包含了網頁。」?如果你試圖暗示ASP.NET MVC沒有提供服務器端驗證的機制,那麼你是不正確的。您應該根據應用程序的業務規則來確認輸入服務器端。即使有人手動將POST發送到您的應用程序,並且完全不使用您提供的UI,您應該檢查它們發送的內容是否有效。 – David
@David:通過使用ModelState.IsValid或Page.IsValid非常容易檢查服務器。但是,當我們編輯非常好的下拉列表中的任何值時,Asp.Net webforms異常會觸發。但在Asp.Net MVC由於缺乏viewstate一切正常。我想我需要在服務器上驗證這樣的事情,並且非常嚴格,但我只是想說Asp.Net webforms提供了一些額外的安全性。這可能是由於ViewState。 –
它提供的內容不是以任何方式「增加安全性」。我明白你在說什麼,基本上這意味着Web Forms中的機制試圖從開發人員中混淆Web的本質。但我認爲,這有助於建立一種安全的Web應用程序而不是更安全的應用程序。基本規則是,應該在服務器端驗證_all_用戶輸入。 _總是_。 – David