如何集成这些代码以防止会话劫持

时间:2013-12-21 20:46:11

标签: php session session-hijacking

我正在使用these docs来集成一定程度的保护以防止会话劫持(页面底部)。 虽然我可以理解文章所解释的基础知识,但我仍然是这一切的新手,我只是无法确定我应该做些什么。

我知道这是如何工作的:

<?php

session_start();

if (isset($_SESSION['HTTP_USER_AGENT']))
{
    if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT']))
    {
        /* Prompt for password */
        exit;
    }
}
else
{
    $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}

?>

...我有点理解这可以使上述内容更加安全:

<?php

$string = $_SERVER['HTTP_USER_AGENT'];
$string .= 'SHIFLETT';

/* Add any other data that is consistent */

$fingerprint = md5($string);

?>

但是,我坚持将两者结合成一个工作脚本。文档声明:

  

我们应该将此指纹作为URL变量传递。

这是什么意思?我是否需要在URL中传递指纹,然后在每个页面上使用$ _GET?有谁能帮我把这两段代码组合成一个文件,我可以把它包含在我的所有PHP文件中?

1 个答案:

答案 0 :(得分:1)

是的,您需要将此令牌添加到任何网址,然后在每个网页上进行检查。

基本上你要完成的是密码学家称之为NONCE的东西 (数字使用一次)。想法是使用参数生成NONCE,然后验证参数没有被篡改。

理想情况下,这应该是随机播放的哈希值 并使用过一次。有许多图书馆会为您处理。 请记住,哈希不是对称的,即你不能取消哈希请求变量以查看它是一样的。

你可以做的是获取参数的哈希值并比较哈希值。重要的是要记住盐,因为没有它们你就会受到彩虹表的影响。

此外,如果您使用 $_REQUEST 而不是 $_GET ,则可以为 $_POST $_GET 重复使用相同的逻辑

您可以查看此库,例如http://fullthrottledevelopment.com/php-nonce-library 你也可以从Wordpress借用nonce生成代码