对于隐藏字段篡改保护: Id,RowVersion,我使用Adam Tuliper AntiModelInjection的一个版本。
我目前正在研究一种方法来防止在选择列表/下拉列表中发现的有效选项被篡改。考虑一个多租户共享数据库解决方案,其中fk不够安全,并且选项在级联下拉菜单中进行动态过滤。
在过去的ASP.NET webforms时代,视图状态可以免费添加防篡改功能。在ajax时代,select列表防篡改是如何实现的?有没有一种通用的解决方案,通过比较散列而不是从数据库中重新获取选项值并手动比较?
发布于 2013-08-27 00:43:49
如果可以,这里的唯一解决方案是根据当前用户If对该数据的权限进行筛选,然后在保存时再次验证这些权限。
如果这是不可能的(服务器端有多种方法来实现这一点,比如通过记录中的CustomerId fk,到在服务器端添加临时安全缓存,等等),那么客户端的值可以提供一个额外的选项。
如果提供了客户端选项,就像对Web表单所做的那样,那么可以考虑基于它们的a。)用户id加上另一个密钥b。)SessionId (session必须提前建立,否则每个请求的session ids可能会改变,直到session对象中存储的值建立session。c.)其他一些不同的值
HTTPS在这里非常重要,所以这些值不会被嗅探到。此外,理想情况下,您希望每个页面都是唯一的。这可能是上面A中的第二个关键字。为什么?我们不希望攻击者想出一种方法,在你的web应用程序的其他地方创建新的记录,并且能够找出1,2,3,4,5,6等的散列或加密值,并本质上创建一个彩虹值表来伪造。
发布于 2013-08-26 08:13:07
Leblanc,根据我的经验,客户端验证主要是为了方便用户。不需要发帖,然后才会发现有问题。
最终的验证需要在服务器端进行,而不是操作HTML。普通用户不会继续使用选择列表和下拉列表。这是由试图破坏您的页面或非法访问数据的人所做的。我想我的观点是,最终的安全性需要存在于服务器中,而不是客户端。
发布于 2013-08-26 11:21:48
我认为在一些假设的情况下,可以创建一个全局解决方案。在我构建任何东西之前,我想提出一个开放的解决方案,看看是否有人可以找到缺陷或潜在问题。
给定所有下拉列表,远程检索它们的数据。+在ajax时代和级联盒中,这现在更常见。(我们使用kendo dropdowns。)
public SelectList GetLocations(int dependantarg);
SelectList将作为json返回-但在让newtonsoft序列化转换器自动注入之前:(在全局级别完成)
当创建http post时,还必须在post中发送EncryptedName : EncryptedAndSigned。对于这个JSON帖子示例,它将是:
{
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.
}
https://stackoverflow.com/questions/18434772
复制相似问题