PHP会话令牌可以多次使用?

时间:2011-01-17 20:51:34

标签: php jquery ajax csrf

我得到了页面A,这是一个普通的HTML页面和页面,它是一个AJAX响应页面。我想通过令牌来防止CSRF攻击。让我说我使用这种方法的自动完成形式,是否可以多次使用相同的令牌(当然会话只设置一次),因为我厌倦了这种方法,但验证在第一个建议后仍然失败(显然令牌有不知何故改变了)

第A页

<?php
session_start();
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;
?>
<input id="token" value="<?php echo $token; ?>" type="hidden"></input>
<input id="autocomplete" placeholder="Type something"></input>
....

每次使用Jquery进行更改时都会自动提交表单。

第B页

<?php
session_start();
if($_REQUEST['token'] == $_SESSION['token']){
echo 'Im working fine';
}
?>

1 个答案:

答案 0 :(得分:3)

只要$ _SESSION ['token']保持不变,就可以多次使用相同的令牌。

每次调用页面A时 - 该令牌都会被覆盖。如果您想使用相同的令牌,可以尝试:

<?php
session_start();
if( !isset($_SESSION['token']) ){
  $_SESSION['token'] = md5(uniqid(rand(), TRUE));
}
<input id="token" value="<?php echo $_SESSION['token']; ?>" type="hidden" />
....

我也不会使用$ _REQUEST,因为这会使您的源不明确 - 我会使用$ _POST或$ _GET。