当我将csrf令牌与会话令牌进行比较时,它不会返回true

时间:2018-12-30 12:26:52

标签: php forms session

我正在尝试使用随机令牌并将其存储为会话,然后将其放置在隐藏的输入文本中,该文本将发送到我的处理页面。如果两个令牌都匹配,则将处理表单,但是在回显两个令牌时,它们确实匹配,但是在实时服务器上,它不匹配。...

我试图同时使用!==和!=符号,但是即使两个标记都相同,也仍然无法匹配它们。.

我已将此代码放在我的主窗体部分中。这是我代码的一部分,因为我的表格太长了

$_SESSION['token'] = bin2hex(random_bytes(32));

<br></br>
         <input type="hidden" name="csrf" value="<?php echo $_SESSION['token']; ?>">
         <button type="submit" name="submit">Sign up</button>
      </form>


This is part of my processing form:

 $csrf = strip_tags($_POST['csrf']);



      // information from memberships' table

       $subscriptionplan = strip_tags($_POST['subscriptionplan']);

       $pricing_level1 = strip_tags($_POST['pricing_level1']);
       $pricing_level2 = strip_tags($_POST['pricing_level2']);
       $pricing_level3 = strip_tags($_POST['pricing_level3']);

       // referral information

       $referral = strip_tags($_POST['referral']);


       if(hash_equals($csrf, $_SESSION['token'])) {

                                              header("Location: ../signup.php?signup=wrongtoken");
                                              exit();
                                            } else {

1 个答案:

答案 0 :(得分:0)

我敢打赌,您忘记将表单提交类型设置为post。任何HTML表单的默认提交类型(如果未设置)为get,因此可以将其设置为post,或者将值分配给$_GET[...]超级全局变量,而不是{{1 }}。