gpt4 book ai didi

php - 通过数据包嗅探保护经过身份验证的 PHP session 免受 session 劫持

转载 作者:行者123 更新时间:2023-12-02 05:41:19 27 4
gpt4 key购买 nike

我对不使用 SSL 保护 PHP session 的主题很感兴趣。

令我惊讶的是,如果中间人嗅探用户和服务器之间交换的数据包,即使已通过身份验证,也很容易窃取 session 。我知道有一些策略可以限制损失,例如,在登录/注销时更改 sessionid,记录/检查用户系统参数(例如 OS、浏览器)。

然而,如果在一个已经通过身份验证且未注销的 session 期间(也没有时间超时),攻击者能够获得 session ID,那么他就可以轻松劫持 session (据我所知理解问题)。

我想到了一个可能的解决方案,在加密的登录身份验证期间,服务器可以向客户端发送一个随机 session 密码。 session 密码仅在该登录 session 期间有效。因此,在该 session 期间交换的每条消息都必须使用 session 密码(例如 MD5( session 密码+消息内容))进行签名。

问题解决了吗?假设攻击者无法对初始登录交换进行密码分析,这种方法的弱点是什么?

最佳答案

您提议的“签名”解决方案需要客户端行为 - 因此您需要一个可以执行签名的客户端应用程序。

如果您正在编写 Flash/Java applet/Unity 或任何这些插件,那么您可以按照您的计划进行,因为您可以更紧密地控制客户端并添加例程来进行签名。

但我假设您是在不使用插件的情况下将 HTML 页面传送到浏览器?如果是这样,你有两个选择,真的。第一个是 SSL(您正在排除),因为它内置于浏览器中。第二个是Javascript。为了获得最大的安全性,您需要以某种方式模仿 SSL,包括加密(公共(public)) key /算法的客户端存储(以便它们永远不会与消息一起传播)。您希望尽可能接近公钥/私钥 + SSL 握手 - 这绝非易事。正如 sarnold 所建议的那样,您需要一个强大的加密 key 。查看http://www.jcryption.org/例如 - 其他人出现在谷歌搜索中。

如果这有点夸张,您最可行的解决方案可能是使用 JS 协商一个更简单的加密算法:您发送一个“ key ”,将“ key ”存储在浏览器的 cookie 中,所有通信都通过 AJAX 和您基于该 key 创建了一个更简单的签名机制(加上可能是客户端在初始握手期间与您共享的另一个变量)。任何不解码或不匹配 key 的东西,然后终止整个 session 并重新开始。


sarnold 在他的回答中有很好的观点,即要避免使用 md5 和 SHA-1;有些人甚至认为 SHA256 对今天的计算机来说越来越弱,但考虑到您需要在 JS 中实现解决方案,为了提高速度,您可能会依赖于像 md5 这样的“piddly”(我的类比)。所以你最好的防御是准确的日志记录和暴力/错误检测。任何到达的乱码消息(你可以在两端检查)都应该被记录和监控。失败次数太多,IP 地址被禁止 - 并继续记录。

关于php - 通过数据包嗅探保护经过身份验证的 PHP session 免受 session 劫持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10907350/

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