我正在使用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文件中?
答案 0 :(得分:1)
是的,您需要将此令牌添加到任何网址,然后在每个网页上进行检查。
基本上你要完成的是密码学家称之为NONCE的东西 (数字使用一次)。想法是使用参数生成NONCE,然后验证参数没有被篡改。
理想情况下,这应该是随机播放的哈希值 并使用过一次。有许多图书馆会为您处理。 请记住,哈希不是对称的,即你不能取消哈希请求变量以查看它是一样的。
你可以做的是获取参数的哈希值并比较哈希值。重要的是要记住盐,因为没有它们你就会受到彩虹表的影响。
此外,如果您使用 $_REQUEST
而不是 $_GET
,则可以为 $_POST
和 $_GET
重复使用相同的逻辑
您可以查看此库,例如http://fullthrottledevelopment.com/php-nonce-library 你也可以从Wordpress借用nonce生成代码