我读到了如何保护 php 中的会话,有一些,但它们不像将用户代理、ip 和端口添加到会话并加密它们那样有效。什么是防止会话劫持的好方法?我想采取以下步骤:
- 将 PHPSESSID 键完全更改为像 id 这样的通用键
- 每页生成令牌并将其放在页面上,然后验证它以及会话。这将减少我单独对会话进行验证的依赖。
- 我会添加一个短会话到期。
- 将更多变量添加到会话 id 并对其进行加密,因此破解会更长且更难。也许我会使用 RSA 加密。
- 放置一个注销按钮,以便用户能够终止他的会话。
- 使用javascript计算时间,超过5分钟会提醒用户继续他的会话。
- 仅将会话保存在 cookie 中。
我听到的困难是:当您使用每页令牌时,您需要禁用后退按钮?这是为什么?
还有几件事也不清楚?在数据库中保存会话是否更安全?为什么?使用 SSL 有多安全?快速重新生成会话 ID 怎么样,会有帮助吗?
什么系统可以防止暴力破解加密密钥(识别试图通过大量尝试猜测会话 id 来淹没服务器的用户的 ip 会有所帮助吗?)?
会话再生是如何工作的,旧的会话密钥是否会自动销毁,如果黑客获得了旧的会话密钥,它仍然可以工作吗?拜托,了解会话安全对我来说很重要,因为我正在学习如何成为一名渗透测试员?
更新 我想这样做: 使用密钥对会话 id 进行对称加密 对随机生成的令牌进行对称加密,该令牌将在带有密钥的 post 字段中
随机生成的令牌也将附加到会话 ID 中,然后加密。
根据要求,我应该得到这些变量: $_SESSION['PHPSESSID'] (其中加密了随机生成的令牌) $_POST['RandomlyGeneratedToken']
使用密钥 A 解密会话 ID 并使用密钥 B 随机解密令牌。做 2 次检查: -检查令牌是否与发送的第一个请求上的令牌相同。- 检查令牌是否存在于 sessionid 中。
黑客的可能性:-暴力破解会话 ID。我的会话 id 足够长,他会花时间。我可以使用一个系统来检测来自具有不同会话 id 的同一 IP 的大量请求流,并使用睡眠功能减慢他的速度。
- 窃听流量并从用户那里获取会话 ID 以及令牌并尝试提交这些。嗯...我将不得不为每个请求重新生成会话 ID,并在某些页面上快速使会话过期..可能是 1 分钟..但是他能以多快的速度窃听?