窃取我的POST数据

6

好的,这可能很基础,但对我在开发阶段很重要。感谢任何意见和讨论。

此示例中的数据未使用SSL加密进行保护。


page1.php/asp包含一个表单,用于将变量usernamepassword POST到page2.php/asp


  • 是否可以通过监听来自任何地方的POST数据来拦截我的数据,例如使用Firesheep等第三方软件?

如果上述问题为TRUE:

  • 我应该始终认为我的未加密POST数据对任何人都是公开的吗?
  • 我的网站上的标准登录表单只是一种欺骗手段,用于描绘甚至不存在的安全层吗?
  • 那么,我应该将登录功能仅视为个性化用户体验的方式吗?
  • 是否有意义鼓励用户不要使用他们正常(假定更安全)的密码,因为在其注册和登录过程中不受保护?

我在思考这些问题,感谢任何意见和反馈。

4个回答

10
当用户通过未加密的HTTP提交登录表单时,他们的数据会通过一系列路由发送到您的服务器。在这些路由中的任何一个地方,某个人都可以嗅探数据。此外,如果用户的计算机受到感染,黑客可以在本地嗅探数据。
如果是登录表单,您应该使用SSL,没有别的选择。还要确保用户的密码在数据库中被加密。登录的过程应该是:
  1. 用户通过HTTPS提交带有用户名和密码的登录信息
  2. 服务器将密码应用哈希算法进行加密,通常使用MD5,但推荐使用SHA256等强密码算法
  3. 服务器将加密后的值与数据库中的加密值进行比较
这样,即使您的数据库曾经被黑客攻击,密码也非常难以破解(除非他们使用类似“password”之类的基本密码,但到那时就是他们的问题了)。

是否有意义鼓励用户不要使用他或她的正常密码,因为它不会受到保护?

这会让用户离开。

注意:md5和SHA不是加密算法,它们是哈希算法。 - Greg B
此外,为了避免彩虹表解密你的用户密码,请对哈希密码进行盐值处理。并且多次重新哈希来使暴力破解攻击几乎无用。这两项措施都是为了防止如果有人获取到哈希密码,仍能得到原始明文密码。 - Carlos Campderrós
谢谢你的好回答。我已经在将密码存储到数据库之前对其进行哈希处理,使用sha256算法对字符串进行处理。该字符串由提供的密码、一个对于该用户是确定的“随机”变量以及一个对于每个用户都相同的较长字符串组成。这意味着网站的访问受到保护,但是用户发送的预期密码却没有得到保护,这让我感到担忧。 - Mattis
@Mattis 如我所述,当发送登录数据时,请使用 HTTPS,结束。某人在路由之间嗅探未加密数据的最糟糕之处在于,在大多数情况下,您无法控制服务器,因此无法监控入侵并意识到用户的密码被盗。他们只有在发现其拥有的某个帐户被黑客攻击时才会发现这一点。 - onteria_

2
是的。任何能看到数据包传输的人都可以看到用户名和密码。这使得在开放、共享的Wi-Fi网络等情况下特别容易受到攻击。
我认为你的所有假设都是正确的,这也是为什么在不同安全级别的服务之间共享密码是一个不好的实践。
如果可以的话,我建议你转向SSL登录,部分原因是因为很多用户会忽略你给他们使用常见密码的建议,而且这也是一种良好的实践。在像Firesheep这样的工具变得越来越容易被“普通”人使用之前,它就是一种良好的实践,现在更加重要了。

2

如果有人使用类似Firesheep的第三方软件监听,是否可以从任何地方拦截我的POST数据?

不可以,只有当流量在他们附近时才能被拦截。

如果上述问题是正确的:

实际上并不正确。

我应该认为我的未加密POST数据对任何人都是公开的吗?

除非它只在局域网内传输,否则是的。如果它只在局域网内传输,则添加“在该局域网上”限定词,答案将是肯定的。

我的网站上的标准登录表单只是一种描绘不存在的安全层的策略吗?

不是。

那么,我应该将登录功能仅视为个性化用户体验的方式吗?

当然不应该在没有加密的情况下进行任何重要操作。

是否有意义鼓励用户不要使用他们通常(假设更安全)的密码,因为在注册和登录过程中这些密码将不受保护?

对于任何系统来说,这都是有意义的。即使通信是安全的,您的服务器也可能在未来被攻击,或者第三方系统可能会被攻击,然后使用那里的数据来攻击您的系统。


感谢David,你的回复回答了我所有的问题。你最后的评论表明你实际上理解了我问问题的意思 :) - Mattis
请看 @MattGibson 的帖子。在局域网上,流量拦截经常只停留在理论上。但是,在使用公共Wi-Fi时,这种情况就会一直发生。 - Frederic Bazin

1
那么,我是否应该认为登录功能仅仅是让我个性化用户体验的一种方式呢? 如果在注册和登录过程中不保护用户正常(被认为更安全)的密码,是否有意义鼓励用户不使用这些密码呢?
这取决于使用登录表单的网站。像 Gmail 这样的大型网站在登录身份验证时使用 https,然后切换到 http。(有报告称,此切换也会引入一些漏洞。)其他网站会在隐藏的表单字段中发送一个盐值。您的原始密码将替换为盐和哈希值。服务器上会重复相同的操作以确保您已发送正确的密码。这些都是在幕后进行的,因此用户无法确定是否发送了未加密的密码。好的网站应该这样做。普通网站可能不这样做。路由器和调制解调器的许多配置页面不使用加密或混淆。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接