建议添加盐的原因很简单。一般来说,当你创建这个“指纹”时 - 如果你只使用一个有限数据集的数据项,那么它会使外部黑客更容易产生这个数据,并劫持会话。
在上例中,如果攻击者同时拥有“指纹”和用户代理,则他们将能够劫持会话。
加入盐只能使得攻击者更难生成指纹,它是:“如果他们都只有一个资料片,那么信息的最后一块毫无用处)
我的情况下, d建议你在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));
这些都是当试图
所以识别会话,劫持会话时,人会需要知道服务器上的以下
- 的时间(精确地)托运时创建会话是
- 用户的浏览器代理字符串
- 用户的IP地址
他们也必须欺骗IP地址(或至少前2/3个八位字节)才能做到这一点。
如果他们确实处于能够获得上述信息的地步,那么他们可能会以其他方式进行攻击,而不仅仅是会话劫持。 vBulletin实际上并没有使用“salt”本身,但在上面的例子中,盐只是添加了有限的熵,最好总能找到尽可能多的熵。
例如,在我正在用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()
这取用户的用户名和密码,当前时间,以及预设的盐来生成这个。对于攻击者而言,由于盐和时间的缘故,攻击者很难生成(尽管如此,请注意,只有在它被使用后才会发生变化,随着时间的推移,如果它没有改变,为特定用户破解这个)
来源
2009-03-05 21:47:34
Mez
包括会话指纹中的IP地址是不好的,因为它会阻止用户合法更改IP地址,例如断开 – Guss 2009-03-05 21:40:29
@Guss的DSL线路:发生这种情况时(或用户代理的浏览器自动更新时),则I会话失效。没什么大不了的,用户必须重新登录。 – cherouvim 2009-03-05 21:42:51