2012-02-24 49 views
2

我想包括在网站安全登录,并给出的威胁模型,我想知道如果我可以放心地回落到这样一个更快的平原连接:

  1. 通过安全连接,谈判随机令牌T。这存储在一个cookie中。
  2. 服务器商店f(T)=hash(private_salt,T,username,password,$_SERVER['REMOTE_ADDR'])
  3. T稍后在未加密的连接上共享。服务器重新计算f(T)以验证连接。

这个想法是T代表没有特定的信息,即使它被盗,来自不同始发IP地址的连接也会导致计算不同的f(T)

明显的弱点是会话在NAT后面被盗用。假设我们可以在实践中解决这个问题。这个问题基本上归结为:欺骗连接有多容易,保留$_SERVER['REMOTE_ADDR']

此网站只需要适度的安全。不会有敏感的流量。 威胁模型基本上是为了应对破坏行为。我只需要阻止无聊的人,而不是俄罗斯黑手党。鉴于这个假设,上述协议是否足够安全?

另外,让我们假设这发生在一个普通的网络浏览器和LAMP - 为了安全的密码传输,是https城里唯一的游戏?似乎Diffie-Hellman密钥交换或类似的就足够了(模拟服务器不在威胁模型中),并且不需要所有签名警报。有大多数浏览器支持的标准apache/php模块吗?

回答

1

坏主意。

我曾经是一个拥有多个IP地址的大型网络。我做的每个请求都由负载均衡器分配给其中一个IP地址。实际上,这意味着我的IP地址在两个连续的请求中很少相同。每次加载页面时,我都会从系统中注销。

您可以尝试使用$_SERVER['HTTP_USER_AGENT'],因为这需要cookie窃贼具有完全相同的浏览器或(假设威胁模型允许足够熟练的破坏者)伪造完全相同的UA字符串。也就是说,如果你不告诉任何人你检查UA字符串,那么对于那些技术娴熟的黑客来计算你的服务器拒绝关于“完美”会话cookie的问题可能会感到困惑。

+1

这是一个“大型网络”某种特殊的企业内部设置?还是在家里的用户常见的做法? – spraff 2012-02-24 17:21:39

+0

我当时在大学。然而,问题依然存在,即任何拥有动态IP的人(即大多数人)在登录时都会遇到问题。 – 2012-02-24 17:24:10

+0

如果您的客户端是移动设备,该怎么办?说一台笔记本电脑或手机。然后你会遇到同样的问题。 – diedthreetimes 2012-02-25 06:35:06

0

似乎这不会工作,如果:有人窃取登录的用户的IP和cookie,或有人知道用户acc /密码。 ...我不明白这将如何应付任何类型的破坏行为虽然(除了可能cookie的bruteforce /猜测攻击):/

也每次连接的IP变化,他将需要重新登录..

+0

这个问题可以简洁地表述为“窃取知识产权有多难?”?青少年可以在另一个大陆上做些什么,还是需要先攻击ISP?这是一个最薄弱环节的问题,如果他们不得不破解一个中间层,那么这是不值得的。 – spraff 2012-02-24 17:20:18

0

与网站的交互使用HTTP,通过TCP运行。 TCP连接是持久的,每次连接设置开始时发生的三次握手都会确保我不会去骗我的IP地址(因为握手中的第二步是从服务器发送到指定的IP地址客户端,所以除非你可以妥协路由表或者做一些其他非常花哨的事(非常困难),否则连接无法建立)。

因此,特别是基于您正在使用的威胁模型,不要处理IP地址欺骗;对于TCP连接,在实践中很难实现这一点。由于客户端可以更改IP地址(ISP发布的动态IP,负载平衡代理服务器,NAT/PAT等),因此您更有可能错误地拒绝好用户,而不是正确拒绝使用此方法的用户。生成一个良好的会话ID,将其存储在cookie中,并根据每个请求进行检查。