【发布时间】:2013-01-09 23:17:26
【问题描述】:
我有这个设置:
带有提交按钮的 HTML 表单 -> 检查是否在 jquery 中按下了按钮 -> 然后通过 $.post (jquery) 将输入发送到 php 页面。
我如何在 php 代码中判断是否有人实际按下了 HTML 表单中的按钮?我想阻止用户在不通过我的表单的情况下向 php 页面提交 $_POST 值。
【问题讨论】:
我有这个设置:
带有提交按钮的 HTML 表单 -> 检查是否在 jquery 中按下了按钮 -> 然后通过 $.post (jquery) 将输入发送到 php 页面。
我如何在 php 代码中判断是否有人实际按下了 HTML 表单中的按钮?我想阻止用户在不通过我的表单的情况下向 php 页面提交 $_POST 值。
【问题讨论】:
我会做以下事情:
令牌可以保存在 DB 或 Session 中,具体取决于您要对它们做什么。
【讨论】:
您基本上是想防范CSRF。正如 GGio 所说,基于会话的令牌是实现这一目标的最佳方式。
if (!isset($_SESSION['token'])) {
$token = sha1(uniqid(rand(), true) . $_SESSION['user_id']);
$_SESSION['token'] = $token;
$_SESSION['token_time'] = time();
}
else{
$token = $_SESSION['token'];
}
在您的表单元素中:
<input type = "hidden" name = "token" value = "<?php echo $token; ?>" >
在处理表单之前:
if(isset($_SESSION['token']) && isset($_POST['token']) && $_POST['token'] === $_SESSION['token']){
//user submitted the form correctly
}
else{
//something isn't right
}
【讨论】: