Ich speichere ein JSON-codiertes Array von Integer-Indizes => Integer-Werte in einem Cookie.
Offensichtlich können Cookies wie jede andere Benutzereingabe leicht manipuliert werden, also hier ist meine Cookie-Getter-Validierung:
if ($_COOKIE['myCookie']) { //if cookie exists
$myCookie = json_decode($_COOKIE['myCookie'], true);
if (!is_array($myCookie)) { //in case decoding fails or bad cookie
$myCookie = array(); //sets it as empty array
}
} else { //if cookie doesn't exist, uses an empty array instead
$myCookie = array();
}
Bevor ich dann einen der Werte verwende, überprüfe ich, ob er im Array vorhanden ist, und teste ihn anhand einer Liste von Werten auf der weißen Liste. Dieser Teil scheint ziemlich sicher zu sein, aber ich poste ihn, da er Teil der Validierung ist:
if (!empty($myCookie[$index])) { //checks if index exists and is truthy
if ($myCookie[$index] !== 1 && $myCookie[$index] !== 2) { //values whitelist
die('Hacking attempt through cookies exploit.');
}
//use the cookie data now
}
Zurück zur Frage, ist es sicher anzurufen json_decode
direkt auf dem Keks? Können Benutzer das Cookie manipulieren, um beliebigen Code auszuführen?
Ich habe bisher viele Themen zu SO gelesen und was ich gefunden habe, ist das unserialize()
ist unsicher abgeblendet, weil es Konstruktoren aufruft, aber json_decode
ist technisch sicher. Ich habe ihre php.net-Seiten durchgelesen, aber diese sprechen die Sicherheit nicht direkt an.
Mein Addon erreicht sehr bald die Live-Beta, also frage ich mich, ob ich anrufe json_decode
direkt auf dem Cookie sicher genug ist oder ob ich vor dem Anruf eine Art Validierung durchführen sollte json_decode
. Ich könnte ein laufen preg_match
auch, aber da ich vor der Verwendung gegen eine Whitelist von Werten teste, sollte es kein Problem geben, es sei denn json_decode
führt irgendwie willkürlichen Code aus, was nicht der Fall ist, oder?
ich weiß das json_encode
kehrt zurück NULL
wenn es kein gültiges JSON ist, aber ich frage mich, ob dies der richtige Ansatz ist oder sollte ich vor dem Anruf eine Art Validierung hinzufügen json_decode
?
Wer das ausnutzen kann, kann Ihren Code wahrscheinlich auf andere bizarre Weise hacken, an die Sie, ich und der Rest der Welt nie gedacht haben
– Itay Moav-Malimovka
6. September 2012 um 2:07 Uhr
@ItayMoav Danke für den Anreiz.
=]
Ich habe es einfach nie benutztjson_decode
auf Benutzereingaben zuvor, und anscheinend gibt es keine Möglichkeit, diese Art von Daten außerdem zu validierenjson_decode
selbst, das zurückkehrtNULL
wenn es fehlschlägt, denke ich.– Fabrício Matté
6. September 2012 um 2:09 Uhr
Wenn Sie Bedenken hinsichtlich der Integrität von Daten in Cookies haben, sollten Sie diese mit einem HMAC signieren und den HMAC überprüfen, bevor Sie ihn verwenden. Verwenden Sie dafür eine Bibliothek oder lassen Sie es ein Framework tun, es ist wahnsinnig schwer, es selbst richtig zu machen !!!
– MauganRa
29. August 2016 um 14:57 Uhr