sai*_*lle 1 asp.net security hash query-string
为了保护Web应用程序免受查询字符串操作,我正在考虑向每个url添加一个查询字符串参数,该参数存储所有其他查询字符串参数和值的SHA1哈希值,然后根据每个请求的哈希值进行验证.
此方法是否提供强大的保护,防止用户操纵查询字符串值?这样做还有其他任何缺点/副作用吗?
我并不特别关注这个私人网络应用程序的"丑陋"网址.由于对于相同的查询字符串参数,哈希值始终相同,因此Url仍然是"可收藏"的.
这是一个ASP.NET应用程序.
我不确定这提供了什么样的安全性.如果中间人攻击者想要更改参数,他们必须做的就是更改查询字符串并重新计算SHA-1哈希并将该请求发送到服务器.
例如,浏览器发送的URL可能是:
http://www.example.com/addUser.html?parameterA=foo&hash=SHA1("parameterA = foo")
如果攻击者拦截了这个,他们可以用这种方式编辑它:
http://www.example.com/adduser.html?parameterA=bar&hash=SHA1("parameterA = bar")
实际上,这可以归结为这样一个事实,即你只能像参数本身一样信任哈希.
解决这个问题的一种方法是,如果用户只有他们和服务器知道的密码,那么攻击者如果更改参数就不可能重新计算哈希值.例如:
http://www.example.com/addUser.html?parameterA=foo&hash=SHA1("parameterA = foo"+"theuserpassword")
但是不要把密码作为URL中的一个参数:)
重要的是要注意,这不是用于验证双方之间传递的消息的完整性的现有技术.今天使用的是基于哈希的消息认证码(HMAC)算法的一种形式,该算法在HMAC中有很好的描述,并且最终在RFC2104和FIPS Pub 198-1中描述.