gpt4 book ai didi

php - 保护php session 劫持的有效方法

转载 作者:行者123 更新时间:2023-12-02 22:10:06 24 4
gpt4 key购买 nike

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

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

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

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

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

session 重新生成是如何工作的,旧的 session key 是否会自动销毁,如果黑客获得了旧的 session key ,它是否仍然有效?请理解 session 安全对我来说很重要,因为我正在学习如何成为一名渗透测试员?

更新我想这样做:使用 key A 对 session ID 进行对称加密对随机生成的 token 进行对称加密,该 token 将在带有 key 的帖子字段中

随机生成的 token 也将附加到 session ID,然后加密。

应要求,我应该获取这些变量:$_SESSION['PHPSESSID'](其中加密了随机生成的 token )$_POST['RandomlyGeneratedToken']

用 key A解密session id,用 key B解密随机token。做 2 项检查:-检查 token 是否与发送的第一个请求上的 token 相同。-检查sessionid中是否存在token。

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

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

最佳答案

“将 PHPSESSID 键完全更改为类似 id 的通用值”

这是通过混淆和薄弱环节实现的安全。用户只需要查看他们的 cookie 并将其放在一起用于 session ID 即可绕过此

“为每个页面生成 token 并将其放在页面上,然后验证它以及 session 。”

这是一个有趣的想法。但是如果用户打开了多个页面怎么办?你能支持多个 token 吗? token 什么时候过期?

“我会添加一个较短的 session 到期时间。”

好主意,但这可能会影响那些在页面上停留很长时间然后点击刷新却发现他们过早退出的用户

“在 session ID 中添加更多变量并对其进行加密,这样它会更长更难破解。也许我会使用 RSA 加密。”

为什么要用RSA加密?为什么不用像 SHA 这样的单向哈希算法呢?不要忘记添加盐或初始化向量

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

谁曾经点击过退出按钮? ;-)

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

“仅在 cookie 中保存 session 。”

不要这样做,始终保存数据服务器端。 cookie 在客户端存储时可以被操纵

至于您的其他评论:您可以将 session 变量存储在数据库中,这允许您检查其他内容,例如 ip 地址等(尽管您可以使用自定义 session 处理函数检查 ip 等:http://php.net/manual/en/session.customhandler.php) .但是,如果您使用数据库并且过于频繁地重新生成您的 session ID(例如,每次加载页面),您会发现如果您的用户快速点击刷新按钮,则该 ID 的重新生成速度将快于您的服务器在数据库中更新它的速度 session 将丢失。

“ session 重新生成是如何工作的,旧 session key 是否自动销毁”

是的,除非您编写自定义代码,否则这取决于您的自定义代码

我希望我的回答有点用,但我建议遵循 OWASP 的 session 管理指南,以便您遵循最佳实践: https://www.owasp.org/index.php/Session_Management_Cheat_Sheet

编辑

我不确定 token 是什么意思?您是说 session ID 中的 token 吗?这会提供什么值(value)?您的 token 是 session 变量吗?这没有意义,因为它的值存储在服务器端,关键是您要防止其滥用的 phpsessid。

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

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

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

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

两种阻止暴力攻击的方法是 1) 有一个非常长的 session ID,以及 2) 频繁地重新生成它

关于php - 保护php session 劫持的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15446557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com