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

时间:2017-07-16 12:56:57

标签: php ajax session cookies

我正在处理php中的用户登录/注册功能。我想要保护Session HiJacking和CSRF攻击。我头脑中有一些混乱,并寻找答案来澄清这些:

详情

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

$_SESSION['LoggedIn'] = true;
$_SESSION['Token'] = random_bytes(32);

我知道,我需要检查每个私有(member_area)页面上的有效会话。但我不明白目的。以下是我脑海中出现的问题:

  1. 我应该将会话令牌作为隐藏字段发送并对每个请求进行验证吗?
  2. 我是否需要设置cookie?
  3. 如何将会话令牌与cookie一起使用以使其更安全?
  4. 如何确保ajax请求在服务器端有效?我是否还需要为访问者生成会话令牌?
  5. 我想保持活动会话一周,所以我需要在数据库中保存会话令牌吗?

1 个答案:

答案 0 :(得分:0)

用于csrf保护:

  1. 生成登录html时,插入一个隐藏字段,其中包含每个登录请求生成的令牌。该令牌具有限制生命消耗。
  2. 当用户提交登录信息时,您需要检查令牌。看它是否仍然有效(即未过期)。
  3. 如果无效则抛出错误。如果有效则继续检查凭据。
  4. 用于通用会话身份验证:

    1. 当用户登录时 - 生成令牌。将它保存到某种持久层(数据库?文件?memcache?)。给它一个到期日期并将其分配给刚刚登录的用户。
    2. 以cookie形式将令牌发送给用户。
    3. 在每个请求中 - 检查请求是否包含带有登录令牌的cookie。如果是 - 请检查数据库中的该令牌。我 f它已过期然后将其删除并返回步骤1
    4. 关于AJAX : 不要担心:)没有什么特别的关于ajax调用。如果设置了有效的cookie,则上述过程将处理它,并且将正确加载用户。

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