我正在开发一个用 C#/ASP.NET 编写的网络应用程序。此应用程序的原始开发者选择使用加密的查询字符串和 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 无关 - SSL 确保浏览器和服务器之间的隐私,但您可以在完全安全的连接下仍然篡改 URL。
关于c# - 为什么要在 ASP.NET 中加密查询字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/491603/