JSON でエンコードされた整数インデックスの配列 => 整数値を Cookie に格納しています。
明らかに、Cookie は他のユーザー入力と同じように簡単に操作できるため、ここに私の Cookie ゲッターの検証を示します。
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();
}
次に、値を使用する前に、それが配列に存在するかどうかを確認し、ホワイトリストに登録された値のリストに対してテストします。この部分はかなり安全に見えますが、検証の一部であるため投稿しています。
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
}
質問に戻りますが、Cookie を直接呼び出しても安全ですか? json_decode
ユーザーは Cookie を操作して任意のコードを実行できますか?
私はこれまでSOに関する多くのトピックを読んできましたがunserialize()
、コンストラクターを呼び出すため安全ではありませんが、json_decode
技術的には安全であることがわかりました。私は彼らのphp.netページを読みましたが、それらはセキュリティに直接対処していません.
私のアドオンはすぐにライブ ベータ版に到達するのでjson_decode
、Cookie を直接呼び出しても安全かどうか、または を呼び出す前に何らかの検証を実行する必要があるかどうか疑問に思っていjson_decode
ます。私も実行できますがpreg_match
、値を使用する前に値のホワイトリストに対してテストしているので、何らかの方法で任意のコードを実行しない限り問題はないはずjson_decode
です。
json_encode
有効なJSONでない場合に返されることはわかっていますが、これが正しいアプローチなのか、それとも呼び出す前に何らかの検証を追加する必要NULL
があるのか 疑問に思っていますか?json_decode
これがばかげた質問である場合は申し訳ありませんが、私は Cookie/JSON の経験がほとんどなく、サーバーのデータベースが削除されたことで非難されたくありません。ヘルプ/情報をいただければ幸いです。=]