【发布时间】:2014-09-02 21:44:23
【问题描述】:
我有点困惑。
首先,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']}然后将其与隐藏表单输入字段中的哈希值进行比较,之后我们重定向到main.php。
但是由于表单输入保留在同一个脚本 (action="") [为了执行验证脚本] 我该怎么做?我无法将 $_POST['hashed_token'] 发送到 main.php。
是否可以在 index.php 和 main.php 之间的脚本上执行验证?让我们说 between.php 并在验证完成后立即重定向到 main.php? [索引.php |之间.php | main.php]
提前致谢。
【问题讨论】:
-
我对这个问题感到困惑。您将令牌放入表单并在发布时对其进行验证。有什么问题?
-
对令牌的建议是将
$_SESSION['hashed_token']作为一个数组,因为它只会接受打开的最后一个创建令牌/每次覆盖令牌的页面。 -
我还会使用哈希作为字段名称。可以搜索“hashed_token”并发现值。 “随机字符串”隐藏得更好一点。然后你会有一个会话变量告诉你字段名和期望值。
标签: php forms validation