我认为在给出一些假设的情况下可以创建一个全局解决方案。在我建立任何东西之前,我想提出一个开放的解决方案,以查看是否有人可以发现缺陷或潜在的问题。
鉴于所有下拉列表都远程检索其数据。 - 在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表单跟踪所有值,当您想通过客户端脚本动态地将值添加到下拉列表中时,它变得困难。 –