我認爲在給出一些假設的情況下可以創建一個全局解決方案。在我建立任何東西之前,我想提出一個開放的解決方案,以查看是否有人可以發現缺陷或潛在的問題。
鑑於所有下拉列表都遠程檢索其數據。 - 在ajax時代和級聯盒現在更常見。 (我們使用的劍道下拉列表。)
public SelectList GetLocations(int dependantarg);
選擇列表的將被返回的JSON - 但沒有newtonsoft序列化器自動注入之前(在全球範圍內完成)
- EncryptedAndSigned屬性設置JSON。該屬性將包含完整SelectList的序列化版本,其中包含所有也被加密的有效值。
- EncryptedName屬性給json。此屬性將有控制器actionname - 在這個例子中EncryptedName值將是「的getLocations」
當HTTP POST由EncryptedName:EncryptedAndSigned必須在後也可以發送。對於這個JSON POST例子那就是:
{
Location_Id: 4,
GetLocations: 'EncryptedAndSigned value'
}
在服務器端:
[ValidateOptionInjection("GetLocations","Location_Id")
public ActionResult Update(Case case)
{
//access case.Location_Id safety knowing that this was a valid option available to the user.
}
所以,如果ValidateOptionInjection加密密鑰列入ActionName,USER_ID,TenantDataGroup_Id,程序集的版本,部署鹽?單獨使用密鑰會使每個下拉式加密都以每個用戶爲基礎單獨使用。這種廣義解決方案的好處是可以用相對小的努力來保護應用程序。額外的服務器驗證器可以始終添加,但從一開始,這將保護大多數下拉列表並阻止更多的個人篡改表單。 –
會,不過,請注意,如果你重構與上述任何數據的改變你的數據會失敗。因此,如果用戶正在編輯一個頁面,而你部署一個新的版本,後返回到服務器,然後將失敗。我不確定你的應用程序是否允許這樣的事情,但要牢記這一點。 Web表單跟蹤所有值,當您想通過客戶端腳本動態地將值添加到下拉列表中時,它變得困難。 –