依赖隐藏的输入和查询字符串

时间:2009-05-16 05:42:18

标签: language-agnostic

假设我有一个接受参数的请求处理程序:key

请求请求:

http://example.com/2323

当处理程序收到GET时,将根据此密钥从db中提取相关数据,并将其提供给表单并显示。在此过程中,key的值被放入隐藏的输入中。

当它收到一个POST时,它有来自查询字符串的键参数,以及来自隐藏输入的键,它们是相同的,只要用户没有篡改它们。

我想知道当表单上的数据保存到db时,是否应该依赖隐藏输入或查询字符串参数。问题是用户可能会在发布之前修改查询字符串,就像隐藏的输入也可能被修改一样,因为源是对用户开放的。

1 个答案:

答案 0 :(得分:9)

嗯,您发送给客户端的任何数据都有可能被修改(可能不是很简单,但仍有可能存在)。

有很多选择;查询字符串,隐藏字段,cookie等等。他们每个人都有这个缺点 - 恶意用户可能会修改这些实体中的数据。

您最好的选择是使用强加密。无论是隐藏字段中的数据还是cookie,都可以轻松加密。然后,当收到请求时,可以将其与早先响应之前存在的值进行比较,并且可以合理地相信数据未被篡改来解密。举个好例子,你应该研究ASP.NET Viewstate的工作原理。

因此,要回答您的问题,您应该不依赖于状态持久性方法而无需额外的安全性实现。如他们所说, Security through obscurity根本不是安全措施。