我正在使用ASP.Net,但我的问题比这更普遍。我有兴趣阅读有关防止用户愚弄HTML表单值和链接的策略,以尝试更新不属于他们的记录。
例如,如果我的应用程序处理二手车并且有添加/删除库存的链接(包括作为URL的一部分的用户ID),我该怎么做才能拦截尝试强制链接并将其他人的ID放在那里?在这个有限的实例中,我总是可以在服务器上运行检查,以确保用户XYZ实际上拥有汽车ABC的权利,但我很好奇有什么其他策略来保持聪明。 (或许做一个页面的校验和?不确定。)
感谢您的意见。
答案 0 :(得分:1)
答案 1 :(得分:1)
您所描述的以下内容是一个名为“不安全的直接对象引用”的漏洞,它在The OWASP top 10 for 2010中被A4识别。
我该怎么做来拦截企图 把链接搞砸,把别人放进去 那里的身份证?
有几种方法可以解决此漏洞。第一种方法是将用户的主键存储在session variable中,这样您就不必担心它会被攻击者操纵。对于将来的所有请求,尤其是更新密码等用户信息的请求,请务必检查此会话变量。
以下是我所描述的安全系统示例:
"update users set password='new_pass_hash' where user_id='"&Session("user_id")&"'";
编辑:
另一种方法是Hashed Message Authentication Code。这种方法比使用Session安全性低得多,因为它引入了一种新的强力攻击模式,而不是避免所有的问题。通过hmac,您可以查看某个消息是否已被没有秘密key
的人修改过。可以在服务器端如下计算hmac值,然后将其存储为隐藏变量。
hmac_value=hash('secret'&user_name&user_id&todays_date)
这个想法是,如果用户试图更改他的用户名或用户ID,那么除非攻击者能够获得“秘密”,否则hmac_value将无效。 您应该不惜一切代价避免使用此安全系统。虽然有时您没有选择(您可以在示例漏洞中做出选择)。