【问题标题】:Is it important to change session on each page request?在每个页面请求上更改会话是否重要?
【发布时间】:2011-06-14 21:40:55
【问题描述】:

当用户在另一个窗口/选项卡上打开另一个页面时会导致冲突。那么如何防止这些冲突呢?一种方法是为每个页面设置相同的会话。每次用户注销/登录时,会话都会重新生成。

<?php
//every page sets its own session if its not ajax so that it dont expire
if(is_ajax()){
$_SESSION['token'] = md5(rand());
}

echo '<div id="token">'.$_SESSION['token'].'</div>';
?>

tokens 将从 div.token 传递给 jquery 执行 ajax 请求。但是当用户打开另一个选项卡时,设置了新会话,然后另一个页面返回“无效请求”错误。

【问题讨论】:

  • 你的意思是改变会话ID吗?为什么每次页面加载都需要重新生成一个新的?为什么它会导致新标签页出现问题 - 所有 URL 都有令牌吗?
  • 是的,所有页面都有将用于 ajax 请求和表单提交的令牌
  • 任何人!?至少任何其他 CSRF 保护 AJAX 请求的方法

标签: php security session csrf


【解决方案1】:

打开多个页面或标签不应干扰会话。如果是这样,您可能在会话中投入过多。

你在会话中存储了什么?听起来您可能在会话中存储了属于 URL 的内容。

编辑:看到您的编辑后,您可能想查看此问题的最佳答案:

PHP - CSRF - How to make it works in all tabs?

【讨论】:

  • 我只是存储随机 md5 哈希来防止 CSRF 攻击。
猜你喜欢
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2017-05-24
  • 2014-03-29
  • 2014-01-15
  • 1970-01-01
  • 2020-12-08
相关资源
最近更新 更多