防止会话cookie劫持无SSL(Prevent session cookie hijacking

2019-07-31 20:09发布


为了防止会话劫持,我打算给特定的cookie名称分配给基于这些变量每个用户: 用户代理IP地址

我用下面的函数生成持有会话ID会话cookie的名字

static function getSessionName(){
    $id= @md5(base64_encode(self::$secretToken.$_SERVER["HTTP_USER_AGENT"].$_SERVER["REMOTE_ADDR"]));
    while(is_numeric($id{0})){
        $id = substr($id, 1).$id{0};
    }
    return $id;
}

这意味着, 每一个该访问我的网站的用户,将有不同的会话cookie的名字 。 它会利用别人的饼干阻止劫机者, 除非他/她改变他/她的用户代理受害者的用户代理; 并试图在网上出现利用受害者的IP地址在某种程度上,就像使用用户的上网调制解调器,路由器,NAT等。

让我用例子来说明它。 所以,如果两个用户使用相同的浏览器,来自同一个IP地址连接,他们得到相同的cookie名(假设f5e30acc605e938b097dee73c0272470)。

现在,该脚本将寻找会话ID在这两个客户命名f5e30acc605e938b097dee73c0272470饼干里面。 在这种情况下,一个客户可以劫持其他的cookie。 同一IP,相同的用户代理,然后同一cookie名称!

这个方法是好的,但不是很安全。 更改用户代理也不是那么困难的事,如果他们从公共网络,如Coffenets,公共热点等连接受害者和劫机者可能具有相同的IP地址

它这样做否认攻击是很重要的,特别是如果我们使用“记住我?” 选项生成持久的会话cookie。

是否有人有一个关于这个问题的建议吗?

作为我的研究,其中一个解决方案使用SSL和安全的饼干了。 但是,我在找没有SSL功能的解决方案。

Answer 1:

如果你是在假定的基础是塞纳里奥

1)攻击者可具有相同的IP地址和2)攻击者可以假装具有相同的用户代理他们有权访问过网发送的任何信息

再有就是为您验证这个cookie的身份没有可能的方式。 这是因为你假设你的假设,所有的这些信息是可用的。

你有两个解决方案:1)使用SSL b)信托,你的用户不会在同一个咖啡馆作为一个攻击者的IP地址是有效的,那你的网站还没有重要到值得大举进攻。 他们能做什么,但 - 让进攻的职位和垃圾邮件? 他们能做到这一点无论如何用自己的账户。

从我的经验,从我读过,我同意“过早的优化是[编程的最大的恶之一]”的说法。 专注你的时间打造的作品,是有用的人,然后,如果事情开始出错网站,想获得一个SSL证书。 你只是没有证书的钱,你没有钱,因为你的网站还没有成功(这样做第一)。

“过早优化”和偏执的安全措施是程序员的诱惑,因为我们喜欢认为自己是从事规模化,很重要的项目时,我们是不是[尚未]。



文章来源: Prevent session cookie hijacking WITHOUT SSL