为了防止会话劫持,我打算给特定的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功能的解决方案。