表单操作和antiCSRF令牌

时间:2014-09-02 21:44:23

标签: php forms validation

我在这里有点困惑。

首先,REGISTRATION表单是否需要antiCSRF令牌?或者我们只将它用于LOGIN表单?

如果注册表格也需要它,那么我有以下问题:

我有 index.php 脚本,其中我有一个表单,然后在将它们插入数据库之前进行某种数据验证。

就像这样:

<html>
.....
<body>
  <?php

     if(!empty($_POST))
     {
       //perform all kind of data validation

       //when all validation is done i need to move to the next page (**main.php**)

       header('Location:main.php');

      }

  <form method="POST" action="">
  <input type="hidden" name="hashed_token" value="<?php echo antiCSRFToken(); ?>" />

          //all kind of input (username, email, password,...)

  </form>

antiCSRFToken()是一个生成随机哈希的函数。

为了防止可能的CSRF攻击,我需要将生成的哈希“保存”在 SESSION 变量{ $ _ SESSION ['hashed_token'] = $ _POST ['hashed_token'] < / strong>}然后在重定向到 main.php 之后将其与隐藏表单输入字段中的哈希值进行比较。

但是由于表单输入保留在同一个脚本上( action =“”)[为了执行验证脚本]我该怎么做?我无法将 $ _ POST ['hashed_token'] 发送到main.php。

是否可以在index.php和main.php之间的脚本上执行验证?让我们说,在验证完成后,在.php和重定向到main.php之间? [index.php | between.php | main.php]

提前致谢。

1 个答案:

答案 0 :(得分:1)

一般来说,注册和登录表单都不需要CSRF保护。他们都没有对登录用户的个人数据或权限做任何事情。也就是说,没有理由拥有CSRF保护,因为您可以编写通用系统并将其应用于网站上的每个表单(除非您明确不希望CSRF保护,例如搜索表格)。

  

为了防止可能的CSRF攻击,我需要在SESSION变量{$ _SESSION ['hashed_token'] = $ _POST ['hashed_token']}中“保存”生成的哈希值,然后将其与哈希值进行比较在隐藏表单输入字段中,

这都是明智的

  

我们重定向到main.php。

不要那样做。将代码放在一般函数中进行比较。将其包含在所有表单处理页面中,并在处理表单时运行它。