php - 该脚本不适用于 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']
- 当用户被授权时出现。
解决方案
value="<?php $_SESSION['token']; ?>"
将您的表格更改为:
value="<?php echo $_SESSION['token']; ?>"
在表格中你忘记添加echo
推荐阅读
- java - Java:此代码片段的时间复杂度与嵌套循环:数据结构和算法
- javascript - 在状态更新时使用 eventListener 进行指数重新渲染
- r - 为什么 geom_pattern= gradient 不会在 RMarkdown 子页面中显示图形?
- javascript - Vue - 根据倒数计时器提前设置引导5进度条宽度
- c# - 有没有更简单的方法来转换 DateTime?到 DateTime.Date.ToString()
- python - 如何使用 matplotlib 在同一张图上绘制 2 组 (x,y) 值作为散点图(由线连接)?
- sql - 将最后一个外观添加到表中
- python - 我正在尝试完成一个程序,我会自动从 kithnyc.com 网站购买鞋子
- python - 如何使用 numpy 从 3x3 矩阵中选择 2x2 矩阵?
- python - numpy数组索引:每行的不同列