假设我有一个接受参数的请求处理程序:key
并请求:
当处理程序收到GET时,将根据此密钥从db中提取相关数据,并将其提供给表单并显示.在此过程中,key的值被放入隐藏的输入中.
当它收到POST时,它具有来自查询字符串的键参数,以及来自隐藏输入的键,它们是相同的,只要用户没有篡改它们.
我想知道当表单上的数据保存到db时,我应该依赖它是隐藏的输入还是查询字符串参数.问题是用户可以在发布之前修改查询字符串,就像隐藏的输入也可以被修改一样,因为源是对用户开放的.
那么,你发送给客户端的任何数据都有可能被修改(它可能不是微不足道的,但仍然存在这种可能性).
有很多选择; 查询字符串,隐藏字段,cookie等等.他们每个人都有这个缺点 - 恶意用户可能会修改这些实体中的数据.
您最好的选择是使用强加密.无论是隐藏字段中的数据还是cookie,都可以轻松加密.然后,当收到请求时,可以将其与早先响应之前存在的值进行比较,并且可以合理地相信数据未被篡改来解密.举个好例子,你应该研究ASP.NET Viewstate的工作原理.
因此,要回答您的问题,您应该不依赖于状态持久性方法而无需额外的安全性实现.正如他们所说,通过默默无闻的安全根本不是安全.