2009-04-15 61 views
2

如果一个按钮,做了一个后用户点击(可以说是具有用户名和密码后),并且这些凭据得到成功验证。如果我做了一个重定向到一个完全不同的应用程序(所以我不能携带会话等),我使用GET与查询字符串的用户名和密码的时候(我甚至可以使用基本的加密是否有帮助,但不管),然后它进入的页面,我检查,以确保它从我预计它来自网页来了,从查询字符串拉值,把它们放在一个会话变量,然后做一个重定向到同一页(去除查询字符串值,以便它们不能被用户查看)。这一切都发生在同一台服务器上的SSL上。URL查询字符串的安全性问题(ASP.NET)

有人能指出有人拦截此方案中的用户名和密码的安全漏洞?

回答

4

如果您正在使用SSL,没有人可以拦截请求。问题实际上与客户本身有关。这不是一个真正的好主意,把用户名和密码在GET请求(即使是加密的),因为:

  1. URL可以很容易地复制并粘贴到别人。
  2. 如果用户点击一个链接外,该URL将被发送引荐。
  3. XSS攻击可以用来劫持URL。
+0

感谢您的答复。我知道这通常不被推荐,但我想知道哪里是安全漏洞。客户端应该永远不会看到查询字符串,因为重定向发生在服务器上,我在清除URL到达客户端之前,对吧? – EdenMachine 2009-04-15 22:08:23

+0

浏览器将会看到该URL,甚至可能会将其缓存。至少,我建议你设置一个cookie(与domain =其他网站),而不是在querystring中传递值。 – 2009-04-15 22:10:32

3

迈赫达德已经给出了一些问题,这里有一些其他:

  • 当一个GET请求中使用的用户名和密码会在用户浏览器的历史记录/缓存清晰可见。
  • 的用户名/密码组合可能会出现在你的服务器登录过。

另外:想想使用'盐渍'哈希密码,而不是只存储它的明文(如果不是这种情况)。 新增:作为迈赫达德正确评论:...即使在盐渍哈希的情况下,它仍然容易受到重放攻击...

编辑:

@EdenMachine:我想你应该谷歌“跨站身份验证”和喜欢 - 这将是‘有些’难以实现,但会(在正确完成)完成更安全(也无缝)。例如链接:http://aspalliance.com/1513_Cross_Site_Authentication_and_Data_Transfer.all