首页 > 解决方案 > 该脚本不适用于 php 中的令牌验证

问题描述

该脚本不适用于 php 中的令牌验证:

<?php
session_start();
if (empty($_SESSION['token'])) {
  $_SESSION['token'] = bin2hex(random_bytes(32));
};
if($_POST['token']==$_SESSION['token']){
  session_destroy();
  header('location: ../index.php');
};

?>
<form action="configs/logout.php" method="POST">
   <input type="hidden" name="token" value="<?php $_SESSION['token']; ?>">
   <button class="nav-link" type="submit">LogOut</button>
</form>

但是,如果我删除令牌验证,一切正常。在我看来,这是因为 session_destroy 在令牌检查被触发之前被触发。

注销时是否需要令牌验证以确保安全?Laravel 为所有表单添加了它,所以我决定也这样做。

UPD。我也尝试过这样做(未设置),但与第一种情况一样,它只是转到 configs / logout.php 选项卡,没有任何反应:

<?php
session_start();
if(empty($_SESSION['token'])) {
  $_SESSION['token'] = bin2hex(random_bytes(32));
};
if($_POST['token']==$_SESSION['token']){
  unset($_SESSION['user']);
  header('location: ../index.php');
};

?>

$_SESSION['user']- 当用户被授权时出现。

标签: php

解决方案


value="<?php $_SESSION['token']; ?>"将您的表格更改为:

value="<?php echo $_SESSION['token']; ?>"

在表格中你忘记添加echo


推荐阅读