PHP会话和Cookie使用指南,提高安全性

PHP会话和Cookie使用指南,提高安全性,php,ajax,session,cookies,Php,Ajax,Session,Cookies,我正在php中开发用户登录/注册功能。我想防止会话劫持和CSRF攻击。我脑子里有一些困惑,正在寻找答案来澄清这些困惑: 详细信息 注册:表单数据在客户端通过jQuery进行验证,然后转换为json对象并通过ajax调用发送。在服务器端对数据进行验证,然后注册用户。用户注册后,使用random_bytes()创建会话令牌(PHP7)函数,并且LoggedIn设置为true $_SESSION['LoggedIn'] = true; $_SESSION['Token'] = random_bytes

我正在php中开发用户登录/注册功能。我想防止会话劫持和CSRF攻击。我脑子里有一些困惑,正在寻找答案来澄清这些困惑:

详细信息

注册:表单数据在客户端通过jQuery进行验证,然后转换为json对象并通过ajax调用发送。在服务器端对数据进行验证,然后注册用户。用户注册后,使用
random_bytes()创建会话令牌
(PHP7)函数,并且
LoggedIn
设置为true

$_SESSION['LoggedIn'] = true;
$_SESSION['Token'] = random_bytes(32);
我知道,我需要检查每个私人(会员区)页面顶部的有效会话。但我不明白目的。以下是我脑海中浮现的问题:

  • 我是否应该将会话令牌作为隐藏字段发送,并对每个请求进行验证
  • 我需要设置cookie吗
  • 如何将会话令牌与cookie一起使用以使其更安全
  • 如何确保ajax请求在服务器端有效?我是否也需要为访客生成会话令牌
  • 我想让会话保持活动状态一周,所以我需要在数据库中保存会话令牌吗
  • 对于csrf保护:
  • 生成登录html时,插入一个隐藏字段,其中包含每个登录请求生成的一些令牌。代币的使用寿命有限
  • 当用户提交其登录时,您需要检查令牌。查看它是否仍然有效(即未过期)
  • 如果无效,则抛出一个错误。如果有效,请继续检查凭据 对于通用会话身份验证:
  • 当用户登录时-生成令牌。将其保存到某种持久层(数据库?文件?memcache?)。给它一个过期日期,并将其分配给刚刚登录的用户
  • 将令牌作为cookie发送给用户
  • 在每个请求上-检查请求是否有带有登录令牌的cookie。如果有-检查数据库中的该令牌。如果过期,则将其删除并返回步骤1
  • 关于AJAX: 不用担心:)ajax调用没有什么特别之处。如果设置了有效的cookie,则上述过程将处理该cookie,并且用户将被正确加载

    关于“保持活力”: 只要您在步骤4中设置了过期日期,会话将保持活动状态