会话从另一个角度劫持

时间:2010-08-28 22:36:34

标签: php security

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

  1. 为每个页面重新生成会话ID
  2. 将用户的IP与登录时的IP进行比较
  3. 将用户的user_agent与登录时的代理进行比较
  4. 会议时间短
  5. 我已经做了所有我能想到的停止劫持的事情,但是我仍然找到了可能的情况,并且想知道是否有人有任何想法。

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

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

    我正在尝试考虑另一种方式(服务器端)来停止劫持或进一步减少劫持,我想到了一个嵌入到每个URL中的令牌(为每个页面更改),并进行了检查。

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

4 个答案:

答案 0 :(得分:3)

强制所有内容都使用HTTPS。

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

如果用户最初键入非https地址,仍然可以进行主动攻击,但在这种情况下您无能为力。将来,一旦用户通过HTTP strict transport security.与您的网站建立了一个纯粹的连接,您就可以防止此类此类攻击。

答案 1 :(得分:1)

我为美军的一个主要分支编写了主登录门户网站。

我做了上面提到的所有事情,再加上至少还有一步:

您是否首次登录时使用SESSION盐存储了cookie?然后使用该盐加密所有 serverside 。这些骗子必须知道这个cookie和STEAL IT,并且它会大大减少会话劫持的风险,因为他们只是不喜欢它。

此外,使用JS和AJAX来检测他们是否安装了闪存,如果安装了闪存,也可以使用另一种盐存储闪存cookie。那时你可以或多或少地假设你有一些非常专注的攻击者而且你可以做的更多(比如发送你的用户GPG密钥以通过javascript使用并让他们签署他们发送给你的每一位数据)

答案 2 :(得分:0)

不要重新发明风暴,您平台的内置会话处理程序非常安全。

PHP的会话处理程序有很多配置。使用HTTPS,在任何时候都不能通过http“cookie_secure”传输会话ID,这是一个很棒的功能,但是名字很糟糕。 httponly cookies使xss更难,因为javascript无法访问document.cookie。 Use_only_cookies会停止会话固定,因为攻击者不能在另一个域上影响这个值(除非他有xss,但那是一个没有实际意义的点)。

PHP配置:

session.cookie_httponly=on
session.cookie_secure=on
session.use_only_cookies=on 

答案 3 :(得分:-1)

  

我正在尝试考虑另一种方式(服务器端)来停止劫持或进一步减少劫持,我想到了一个嵌入到每个URL中的令牌(为每个页面更改),并进行了检查。

你应该看看:

Understanding the Rails Authenticity Token

代币是一个好主意。