Kurz aber interessant hier. Ich habe hier wahrscheinlich etwas Seltsames, aber ich habe jetzt ein paar Stunden verloren und kann nicht herausfinden, was das Problem ist.Vergleich von random_bytes schlägt fehl, wenn Werte übereinstimmen
Ich habe eine Funktion, die eine Nonce erzeugt, so. Es ist im Moment nicht sehr komplex, aber es ist mehr ein Experimentieren mit einem Konzept, das für mich neu ist. Ich verwende random_bytes als der natürliche Nachfolger von mcrypt_create_iv
für PHP7 +:
$token = random_bytes(16);
diese dann wie so gespeichert ist:
$session->add('nonce',$token);
(which is essentially....)
$_SESSION[$var] = $val;
während gleichzeitig in meiner Form, wie so verwendet:
<input name="token" type="hidden" value="<?=$token?>">
Das Formular sendet und übergibt einige Validierung und so weiter. Als Teil davon, rufe ich beiden Werte:
$token = $_POST['token'];
$nonce = $session->get('nonce');
und dann habe ich einen Validierungspunkt für die weitere Ausführung - geht nur dann, wenn die beiden Werte übereinstimmen. Das Problem ist, ich kann sie nicht dazu bringen, das zu bestätigen. Keines dieser aktuellen Ausgabe wahr:
if(hash_equals($nonce, $token))
if($nonce === $token)
var_dump
zeigt beide Strings gleich lang, aber aus irgendeinem Grund sind sie nicht vergleichbar. Beide Werte sehen aus, als würden sie übereinstimmen.
if(hash_equals($nonce, $nonce))
auf true gleich (wie man erwarten würde), so kann ich nur annehmen, dass einer der Werte auf dem Weg verändert wird immer entweder durch $_POST
oder über meine Retrieval-Funktion (die buchstäblich nur von der liest Session).
Ich würde mich über jede Hilfe/Vorschläge mit diesem - ich habe entweder übersehen, etwas offensichtlich, oder zu unerfahren mit diesem.
Ausgezeichnet - Ich habe meine Funktion zu '$ token = base64_encode (random_bytes (16));', die jetzt funktioniert. Ich wusste, es wäre etwas Einfaches, aber du bist trotzdem eine Legende! –