2

我读到了如何保护 php 中的会话,有一些,但它们不像将用户代理、ip 和端口添加到会话并加密它们那样有效。什么是防止会话劫持的好方法?我想采取以下步骤:

  1. 将 PHPSESSID 键完全更改为像 id 这样的通用键
  2. 每页生成令牌并将其放在页面上,然后验证它以及会话。这将减少我单独对会话进行验证的依赖。
  3. 我会添加一个短会话到期。
  4. 将更多变量添加到会话 id 并对其进行加密,因此破解会更长且更难。也许我会使用 RSA 加密。
  5. 放置一个注销按钮,以便用户能够终止他的会话。
  6. 使用javascript计算时间,超过5分钟会提醒用户继续他的会话。
  7. 仅将会话保存在 cookie 中。

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

还有几件事也不清楚?在数据库中保存会话是否更安全?为什么?使用 SSL 有多安全?快速重新生成会话 ID 怎么样,会有帮助吗?

什么系统可以防止暴力破解加密密钥(识别试图通过大量尝试猜测会话 id 来淹没服务器的用户的 ip 会有所帮助吗?)?

会话再生是如何工作的,旧的会话密钥是否会自动销毁,如果黑客获得了旧的会话密钥,它仍然可以工作吗?拜托,了解会话安全对我来说很重要,因为我正在学习如何成为一名渗透测试员?

更新 我想这样做: 使用密钥对会话 id 进行对称加密 对随机生成的令牌进行对称加密,该令牌将在带有密钥的 post 字段中

随机生成的令牌也将附加到会话 ID 中,然后加密。

根据要求,我应该得到这些变量: $_SESSION['PHPSESSID'] (其中加密了随机生成的令牌) $_POST['RandomlyGeneratedToken']

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

黑客的可能性:-暴力破解会话 ID。我的会话 id 足够长,他会花时间。我可以使用一个系统来检测来自具有不同会话 id 的同一 IP 的大量请求流,并使用睡眠功能减慢他的速度。

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

4

1 回答 1

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中的令牌吗?那会提供什么价值?您的令牌是会话变量吗?这没有任何意义,因为它的值存储在服务器端,关键是您试图阻止其滥用的 phpsessid。

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

最后,为什么你需要这么多安全性(不要对此投反对票)?有足够好的安全性(如果您遵循某些标准)。您可能不需要防范外国政府黑客,否则您可能会将这个项目外包。遵循易于谷歌搜索的教程或指南中概述的最佳实践,例如我上面提供的 OWASP。就足够了:-)

编辑 “另外,你说最佳存储是数据库?我描述的最后一种反对暴力破解的方法怎么样”

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

阻止蛮力攻击的两种方法是 1) 拥有一个非常长的会话 id,以及 2) 频繁地重新生成它

于 2013-03-16T07:28:04.113 回答