会话从另一个角度劫持

Wol*_*olf 10 php security

我一直致力于一个安全的登录/门户类型工具集,一般代码没有SQL注入,XSS等,我有很多东西来阻止会话劫持.

  1. 为每个页面重新生成会话的ID
  2. 在登录时将用户的IP与IP进行比较
  3. 在登录时将用户的user_agent与代理进行比较
  4. 会议时间很短

等等

我已经做了所有我能想到的停止劫持的事情,但是我仍然找到了可能的情况,并且想知道是否有人有任何想法.

想象一下,在防火墙后面有2个用户执行SNAT/DNAT的情况,因此两者都来自同一个IP.它们都是由同一地方提供的相同机器.一个连接到站点并登录,另一个复制PHPSESSID cookie并且可以简单地窃取会话.

这可能听起来像一个极端的例子,但这与我的工作地点非常相似,每个人都在防火墙后面,所以看起来是相同的IP,所有机器都由IT团队管理/提供,所以所有都有相同的版本浏览器,操作系统等

我试图想到另一种方式(服务器端)停止劫持或进一步最小化它,我想到一个令牌嵌入到每个URL(为每个页面更改),并检查.

我正在寻找想法或建议,如果你想提供你喜欢的代码或例子,但我对我的令牌想法的开箱即用的想法或评论更感兴趣.

Art*_*cto 3

强制一切都使用 HTTPS。

我认为您指的是网络中的用户嗅探 cookie 的被动攻击。为此,您不需要 HTTPS。当双方确定他们正在与谁交谈时,有几个选项就足够了(例如,您可以先进行 DH 交换,服务器将加密客户端将在下一个请求中使用的令牌......),但它不是沿着这条路走下去是值得的。

如果用户最初输入非 https 地址,主动攻击仍然有可能,但在这种情况下您无能为力。将来,一旦用户通过HTTP 严格的传输安全性与您的站点建立了一个纯粹的连接,您就可以防止此类攻击。

  • @Wolf 如果您使用 HTTPS,其他人将无法获得您的会话 ID。没有任何魔法令牌可以拯救你。你必须对其进行加密,即使如此,如果主动攻击者能够在受害者看来就像是真正的http服务器(例如通过dns中毒),它也无济于事。忘记你正在考虑的任何技巧;他们不会工作。 (2认同)