在没有SSL的情况下防止会话cookie劫持




为了防止会话劫持,我尝试根据以下变量为每个用户分配一个特定的cookie名称:用户代理IP地址

我已使用以下函数生成会话cookie名称,该名称包含会话ID

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名称。它将阻止劫持者使用其他人的cookie,除非他/她将自己的用户代理更改为受害者的用户代理;并试图以某种方式使用受害者的IP地址出现在网上,比如使用用户的互联网调制解调器、路由器、NAT等。

让我举个例子来解释一下。因此,如果两个用户使用相同的浏览器并从相同的IP地址连接,他们将获得相同的cookie名称(假设f5e30acc605e938b097dee73c0272470)。

现在,脚本将在这两个客户端上名为f5e30acc605e938b097dee73c0272470的cookie中查找会话ID。在这种情况下,其中一个客户端可以劫持另一个客户端的cookie。相同的IP,相同的用户代理,然后相同的cookie名称!

这种方法很好,但不太安全。改变用户代理并不难,如果受害者和劫持者从Coffenets、public hotspots等公共网络连接,他们可能拥有相同的IP地址。

拒绝攻击者这样做很重要,尤其是如果我们使用"还记得我吗?">选项来生成持久的会话cookie

有人对这个问题有什么建议吗?

正如我所研究的,其中一个解决方案是使用SSL和安全cookie。但是,我正在寻找一个没有SSL使用的解决方案。

如果您的senario基于

1) 攻击者可以拥有相同的ip地址和2) 攻击者可以假装拥有相同的用户代理,因为他们可以访问通过网络传输的任何信息

那么您就无法验证此cookie的身份。这是因为你在假设中假设所有这些信息都是可用的。

您有两种解决方案:a) 使用SSLb) 相信你的用户不会和攻击者在同一家咖啡店,相信IP地址是有效的,相信你的网站还不够重要,不值得大规模攻击。他们还能做些什么?制造攻击性的帖子和垃圾邮件?无论如何,他们都可以用自己的账户做到这一点。

根据我的经验和我所读到的内容,我同意"过早优化是[编程的最大弊端之一]"的说法。把你的时间集中在建立一个对人们有用的网站上,然后,如果出现问题,考虑获得SSL证书。你只是没有钱买证书,也没有钱,因为你的网站还没有成功(所以先这么做)。

"过早优化"和偏执的安全措施对程序员来说是一种诱惑,因为我们喜欢认为自己在从事大规模、非常重要的项目,而我们还没有。

相关内容

  • 没有找到相关文章

最新更新