【发布时间】:2017-07-17 09:59:27
【问题描述】:
这里简短而有趣。我可能在这里遇到了一些奇怪的事情,但我现在已经浪费了几个小时,无法找出问题所在。
我有一个产生随机数的函数,就像这样。目前它不是很复杂,但更多的是对我来说新概念的实验。我使用 random_bytes 作为 PHP7+ 的 mcrypt_create_iv 的自然继承者:
$token = random_bytes(16);
然后这样存储:
$session->add('nonce',$token);
(which is essentially....)
$_SESSION[$var] = $val;
同时以我的形式使用,如下所示:
<input name="token" type="hidden" value="<?=$token?>">
表单提交并通过一些验证等。作为其中的一部分,我检索了这两个值:
$token = $_POST['token'];
$nonce = $session->get('nonce');
然后我有一个进一步执行的验证点 - 只有当两个值匹配时才继续。问题是,我实际上无法让他们验证。这些当前输出都不是真的:
if(hash_equals($nonce, $token))
if($nonce === $token)
var_dumpshows 都是长度相等的字符串,但由于某种原因,它们不可比较。这两个值看起来很匹配。
if(hash_equals($nonce, $nonce))
等于 true(如您所料),所以我只能假设其中一个值正在被更改,无论是通过 $_POST 还是通过我的检索函数(实际上只是从会话中读取) .
如果有任何帮助/建议,我将不胜感激 - 我要么忽略了一些明显的事情,要么对此缺乏经验。
【问题讨论】: