当前位置:  开发笔记 > 编程语言 > 正文

PHP Sessions + Useragent with salt

如何解决《PHPSessions+Useragentwithsalt》经验,为你挑选了1个好方法。

在过去的几天里,它一直在我的脑海中运行,但我读了一些关于如何使PHP会话更安全的文章.几乎所有这些文章都说你需要在会​​话中使用额外的盐来保存useragent.像这样的东西:

$fingerprint = md5('SECRET-SALT'.$_SERVER['HTTP_USER_AGENT']);

盐会使攻击者更难以劫持或任何会话.但为什么每次检查时都加盐:

md5('SECRET-SALT'.$_SERVER['HTTP_USER_AGENT']) == $_SESSION [ 'fingerprint' ]

因此,为什么盐会使它更安全,因为攻击者仍然只需要使用者(相对来说是一小组不同的使用者)和sessionid?

可能是我忽略的小东西,但无法弄明白,让我疯狂哈哈

谢谢!



1> Mez..:

建议添加盐的原因很简单.通常,当您创建此"指纹"时 - 如果您只使用一个具有有限数据集的数据项,则外部黑客可以更轻松地生成此数据并劫持会话.

在上面的示例中,是的,如果攻击者同时具有"指纹"和用户代理,则他们将能够劫持会话.

添加盐只会使攻击者更难以生成指纹,这是"如果他们只有一条信息,那么最后一条信息就会变得无用"

我建议你添加一些东西,例如,在vBulletin(我曾经工作的一个项目)中,使用以下代码生成会话ID哈希(与指纹基本相同).

define('SESSION_IDHASH', md5($_SERVER['HTTP_USER_AGENT'] . $this->fetch_substr_ip($registry->alt_ip))); // this should *never* change during a session

此外,使用生成会话哈希

md5(uniqid(microtime(), true));

在尝试识别会话时都会检查这些

因此,为了劫持会话,该人需要知道以下内容

创建会话时服务器上的时间(确切)

用户Browser代理字符串

用户的IP地址

他们还必须欺骗IP地址(或至少前2/3个八位字节)才能做到这一点.

如果他们实际上已经设法获得上述信息,那么他们很可能能够以其他方式进行攻击,而不仅仅是会话劫持.

vBulletin实际上并没有使用"盐"本身,但是,在上面的例子中,盐只是添加了有限量的熵,最好找到尽可能多的熵.

例如,在我目前用python编写的东西中,我生成了一个用于XSRF保护的哈希.以下是我使用的内容.

    self.key = sha1(
        self.user.username +
        self.user.password +
        settings.SECRET_KEY +
        strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
    ).hexdigest()

其中包含用户的用户名和密码,当前时间以及预设的盐来生成此信息.这对于攻击者来说很难生成由于盐和时间(但是请注意,这只是因为一旦使用它就会变得安全,随着时间的推移,这对于某人来说并不需要太多如果它没有改变,请为特定用户破解这个)

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有