php、magicquotesgpc でのシリアル化解除に対する magic_quotes_gpc の影響の分析
この記事では、PHP でのシリアル化解除に対する magic_quotes_gpc の影響を分析します。参考のためにみんなで共有してください。詳細は以下の通りです
magic_quotes_gpc は、一重引用符と二重引用符にセキュリティ フィルタリングを追加する PHP の関数です。ただし、この関数は、unserialize 関数を使用するときに何らかの影響を与えます。
この問題に対するいくつかの例と解決策を見てみましょう。
昨日、友人が彼のウェブサイトのショッピング カート プログラムの問題を解決するのを手伝ってほしいと頼んできました。そのプログラムは PHPCMS を使用していました。具体的な問題は、ショッピング カートを正常に追加した後にジャンプすることです。ショッピングカートページへ、ショッピングカートは空です。
コードを確認しました。一般的な原則は、製品 ID と数量を配列に格納し、それをシリアル化して COOKIE に格納し、ショッピング カート ページの COOKIE を逆シリアル化し、この配列を取得して、対応する製品を読み出すことです。情報
デバッグ後、アンシリアル化で問題が発生したことがわかり、最初にショッピング カートの原則に基づいてコードを作成しました。そのコードは次のとおりです。
コードをコピーします コードは次のとおりです:
header("コンテンツタイプ: text/html; charset=utf-8");
$magic = get_magic_quotes_gpc() "オン" : "オンではありません";
$str = array(array('goods_id'=>13,'number'=>1));
setcookie("カート", シリアル化($str));
echo "magic_quotes_gpc: ".$magic."
";
echo $_COOKIE['cart']."
";
Print_r(unserialize($_COOKIE['cart']));
?>
このコードを実行すると、magic_quotes_gpc がオフの場合はこのプログラムが問題なく実行されることがわかりますが、magic_quotes_gpc がオンの場合は、この時点でデシリアライズが成功していないことがわかります。問題の嘘?
その理由は、magic_quotes_gpc がオンになっていると、システムが自動的にエスケープして POST GET COOKIE の結果に一重引用符を追加するため、$_COOKIE['cart'] の値が a:1:{i:0; になるためです。 a:2:{s:8:"goods_id";i:13;s:6:"number";i:1;}}、この場合、unserialize は正常に deserialize できず、問題が発生します。
解決策は、単に unserialize($_COOKIE['cart']) を unserialize(stripslashes($_COOKIE['cart'])) に変更し、COOKIE の前にストリップスラッシュを追加し、エスケープ文字を削除するだけです。そうすれば問題は発生しません。
Cookie の影響について別のテストを行ってみましょう:
1. 質問:
プロジェクト データをシリアル化して Cookie に保存する必要があります。その後、Cookie データを逆シリアル化して元のデータを取得します。
コードは次のとおりです。
コードをコピーします
コードは次のとおりです:$a[0] = array("key"=>"哈洛");
$a[1] = array("key"=>"ハル");
$jsona = json_encode($a);
setcookie("テストクッキー","");
setcookie("testcookie",$jsona);
var_dump($jsona,true); //通常の値
var_dump(json_decode($_COOKIE['testcookie'],true)); //値を取得できません
Cookieの割り当てがない場合は、通常通りデシリアライズを行うと、Cookieを渡した後、取得される値は空になります。
2. 分析、
コードは次のとおりです:
コードをコピーします
コードは次のとおりです:
$a[0] = array("key"=>"哈洛");
$a[1] = array("key"=>"ハル");
$jsona = json_encode($a);
var_dump($jsona); //string(50) "[{"key":"u54c8 u903b"},{"key":"u54c8 u903b"}]"
setcookie("テストクッキー","");
setcookie("testcookie",$jsona);
var_dump($_COOKIE['testcookie']); // string(62) "[{"key":"\u54c8 \u903b"},{"key":"\u54c8 \u903b"}]"
var_dump(json_decode($_COOKIE['testcookie'],true));
データを比較した後、Cookie 処理後にさらに // 解決策は次のとおりです。
コードをコピーします コードは次のとおりです:var_dump(json_decode(stripslashes($_COOKIE['testcookie']),true));
var_dump(json_decode(str_replace("\","",$_COOKIE['testcookie']),true));
3. 概要: magic_quotes_gpc をオンにすると、get|post|cookies を通じて取得したデータに影響します。そのため、get|post|cookies でデータを処理するときは、まず、magic_quotes_gpc がオンになっているかどうかを判断します。
① 有効にすると、データを処理するためにストリップスラッシュが必要になります
② 有効になっていない場合は、最初にデータを受け入れてスラッシュを追加し、データをストリップスラッシュで処理します
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/928213.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/928213.html技術記事 php での unserialize に対する magic_quotes_gpc の影響の分析、magicquotesgpc この記事では、php での unserialize に対する magic_quotes_gpc の影響を分析します。参考のためにみんなで共有してください。詳細は以下の通りです...