我在使用C#/ ASP.NET编写的Web应用程序上工作.此应用程序的原始成帧器选择使用加密的查询字符串并Viewstate
控制应用程序的"安全性"和"状态".
在此之前来自GET/POST世界,我没有一个很好的基础来理解为什么人们会遇到加密查询字符串的麻烦,当使用POST来处理敏感数据(以及SSL)会达到类似的水平安全.
我的问题是:在ASP.NET中使用加密查询字符串有哪些优缺点?是否有记录在案的"最佳实践"?
编辑:人们倾向于关注Viewstate
这个问题. 不要.提到Viewstate只是为了让您更好地确定"状态"是如何管理的,因为它与URL相切.我从来没说过Viewstate
加密了.确实存在两个问题:1)使用Viewstate
和2)加密查询字符串的使用.这个问题集中在后者上.我希望这有助于澄清问题的重点.
您可能会执行此类操作的原因是为了防止篡改URL以访问除您自己之外的数据.例如,如果您有网址:
http://foo.com/user.aspx?user_id=123
我(或任何人)将其改为:
http://foo.com/user.aspx?user_id=124
如果您的数据访问策略完全依赖于查询字符串中的内容,则可能允许未经授权的数据访问.
这种方法确实可以正确地实现这一目的,但是更加健壮的方法是在应用程序中主动检查授权,而不是完全依赖URL进行身份验证和/或授权.
请注意,这与SSL无关 - 这可以确保浏览器和服务器之间的隐私,但您可以在完全安全的连接下并仍然篡改URL.