【发布时间】:2019-05-27 09:41:16
【问题描述】:
我正在尝试使用随机令牌并将其存储为会话,然后将其放置在隐藏的输入文本中,该文本将发送到我的处理页面。如果两个令牌都匹配,则将处理表单,但是当回显两个令牌时,它们确实匹配,但在实时服务器上,它不匹配......
我尝试同时使用 !== 和 != 符号,但即使两个标记相同,它仍然无法匹配它们..
我已将此代码放在我的主表单部分。这是我的代码的一部分,因为我的表单有点太长了
$_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 {
【问题讨论】:
-
这看起来像您为每个请求生成一个 new 会话令牌。所以表单生成和表单处理请求不同。
-
我可能在这里感到困惑,但也许有人可以在这里帮助我......这行代码:if(hash_equals($csrf, $_SESSION['token'])) {
-
我们是否正在检查它们是否匹配?如果是这样,我想如果他们匹配,我只是重定向了用户!
-
傻我!我应该使用... if(!hash_equals($csrf, $_SESSION['token']){}
-
我应该使用以下哪一项来随机生成字符串? base64_encode(openssl_random_pseudo_bytes(32));