2013-03-16 67 views
2

会话劫持我如何在PHP保护会话阅读的有效途径,也有少数,但他们不那么有效,如添加到会话用户代理,IP和端口和加密他们。 什么是防止会话劫持的好方法? 我认为采取以下步骤:保护在PHP

  1. 更改PHPSESSID关键干脆通用的东西像ID
  2. 生成每页的令牌,并把它放在网页上,然后对其进行验证,以及德会议。这将减少我仅依靠会议进行验证。
  3. 我会添加一个短会话到期。
  4. 添加更多变数会话ID和加密,所以这将是更长,更难破解。也许我会使用RSA加密。
  5. 放置一个注销按钮,以便用户能够终止他的会话。
  6. 使用javascript计算时间,超过5分钟将提醒用户继续他的会话。
  7. 仅在Cookie中保存会话。

我听到的困难是:当您每页使用令牌时,您需要禁用后退按钮?这是为什么?

一些其他的东西也不清楚?在数据库中保存会话更安全吗?为什么? 使用SSL有多安全?如何快速重新生成会话ID,它会有帮助吗?

什么系统将防止暴力破解的加密密钥(将确定谁试图与充斥大量尝试猜测会话ID将帮助服务器的用户的IP?)?

如何会话再生工作,是自动销毁旧的会话密钥,如果黑客获得一个老的会话密钥将它仍然工作是什么?请,对我来说理解会话安全非常重要,因为我正在学习如何成为一名渗透测试人员?

UPDATE 我认为要做到这一点: 对称加密与一个随机生成的令牌密钥A 对称加密的会话ID,这将是在后场与关键

随机生成的令牌也会被附加到会话ID,然后进行加密。

等待,我应该得到这些变量: $ _SESSION [ 'PHPSESSID'](已随机生成的令牌是加密的) $ _ POST [ 'RandomlyGeneratedToken']

与密钥A解密会话ID和使用密钥B对随机令牌解密。 做2次检查: - 如果令牌与发送的第一个请求上的令牌相同,则检查该令牌。 - 检查令牌是否存在于sessionid中。

可能性为黑客: -Bruteforce会话ID。 我的会话ID足够长,需要他时间。我可以使用一个系统来检测来自同一个IP地址的大量请求,并使用不同的会话ID,并通过休眠功能减慢它的速度。

- 窃听流量并从用户以及令牌获取会话ID,并尝试提交这些令牌。 嗯...我将不得不重新生成每个请求的会话ID,并在某些页面上快速过期会话..可能是1分钟.. 但他能多快地窃听?

+0

梦Eater..nice看看如何ü要关闭thread..u一无所知..所以你投票结束..血腥无知 – BlackFire27 2013-03-16 09:17:51

回答

5

“完全改变PHPSESSID关键的东西像通用ID”

这是通过模糊的安全,并在此上弱。用户只需要查看他们的cookie并放在一起用于会话ID就可以绕过这个

“每页生成一个令牌并放在页面上,然后验证它以及会话。”

这是一个有趣的想法。但如果用户打开了多个页面呢?你能支持多个令牌吗?令牌何时过期?

“我会添加一个短会话到期。”

好主意,但这样可能会影响谁留在网页上的用户很长一段时间,然后只命中刷新发现,他们已注销太快

“添加更多变数会话ID和加密,所以它会更长,更难破解,也许我会使用RSA加密。“

为什么使用RSA加密?为什么不用SHA之类的单向散列呢?不要忘记添加盐或初始化媒介

“放一个注销按钮,以便用户能够终止他的会话。”

谁曾经点击注销按钮? ;-)

“使用javascript计算时间,超过5分钟将提醒用户继续他的会话。”

“将会话保存在cookie中”。

不这样做,总是保存数据服务器端。 Cookie可以被操纵,因为它们存储在客户端

至于你的其他意见:你可以将你的会话变量存储在数据库中,这可以让你检查其他东西,如IP地址等(虽然你可以检查IP等自定义会话处理功能:http://php.net/manual/en/session.customhandler.php)。但是,如果您使用数据库并且过于频繁地重新生成会话ID(例如每次页面加载时),都会发现如果用户快速点击刷新按钮,则该ID将重新生成得比您的服务器在数据库中更新它的速度更快会话将会丢失。

“怎么会再生工作,是自动销毁旧的会话密钥”

是,除非你编写自定义代码,然后就看你的自定义代码

我希望我的答案是有点用处,但我推荐以下为OWASP会话管理的指导方针,以便您遵循最佳做法: https://www.owasp.org/index.php/Session_Management_Cheat_Sheet

编辑

即时通讯不知道你的意思是什么?你的意思是在会话ID中使用token吗?这将提供什么价值? 您的令牌是会话变量吗?这是没有意义的,因为它的价值是存储在服务器端的关键是哪个phpsessid的滥用,你试图阻止。

另外 - 永远不要指望黑客的能力不理解你的逻辑。如果他们想了解它,他们会。

最后,为什么你需要这么多的安全性(不要为此而投票)?有这么一个好的安全性(如果你遵循某些标准)。你可能不需要保护外国政府黑客,否则你可能会外包这个项目。请遵循易于使用的教​​程或指南(如上面提供的OWASP)中列出的最佳做法。这将是足够:-)

编辑 “还有,你说的最佳存储是数据库?关于我反对野蛮描述的最后一种方法迫使什么”

数据库会话存储不一定最佳。您在需要时使用它,例如在负载均衡需要共享会话数据的多个Web服务器时。

两种方式来阻碍蛮力攻击是1)有一个很长的会话ID,和2)重新生成频繁

+0

我读了那张纸和其他一些文章。你能扩展令牌每页位吗?什么是每个页面生成一个令牌的问题,将它嵌入到会话和页面中(以便两者之间会有绑定),也许使用不同的散列方式可能使用对称加密,并且在服务器端验证它们服务器 - 黑客甚至不会理解它背后的逻辑,即使看到我的所有cookie,并可以操纵我的帖子字段。另外,你说最佳的存储是数据库?我说的最后一种方法,我反对蛮力强迫 – BlackFire27 2013-03-16 08:02:16

+0

看到附加答案 – Tucker 2013-03-16 08:23:12

+0

我的意思是使用一个令牌,将其附加到会话ID和隐藏字段。为每个使用对称加密。使用只能解密会话标识的密钥对会话标识进行加密,并使用带有标记的不同加密密钥进入表单。根据请求,应该使用一个密钥解密会话ID,并使用不同的密钥解密令牌作为后置变量。然后检查帖子标记字段,如果会话ID不包含,则中止请求。另外SSL的安全性,我的意思是它加密一切再加上公钥对某些CA权威机构进行验证 – BlackFire27 2013-03-16 09:14:49