一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php中magic_quotes_gpc對unserialize的影響分析

php中magic_quotes_gpc對unserialize的影響分析

2020-08-22 17:01PHP教程網 PHP教程

這篇文章主要介紹了php中magic_quotes_gpc對unserialize的影響,以實例的形式分析了magic_quotes_gpc安全過濾對unserialize造成的影響以及對此的解決方法,非常具有實用價值,需要的朋友可以參考下

本文實例分析了php中magic_quotes_gpc對unserialize的影響。分享給大家供大家參考。具體如下:

magic_quotes_gpc是一個php中一個給單雙引號增加一些安全過濾的函數,但此函數對于我們使用unserialize函數時會產生一些影響,下面我們就這個問題與大家看幾個實例與解決辦法.

昨天朋友讓我幫他解決下他網站的購物車程序的問題,程序用的是PHPCMS,換空間前是好的,剛換的空間,具體問題是提示成功加入購物車后跳轉到購物車頁面,購物車里為空.

我看了下代碼,大致的原理就是將產品ID與數量存放到數組中,然后序列化后存入COOKIE中,在購物車頁面反序列化COOKIE,得到這個數組并讀出對應產品信息.

調試一下發現問題出現在unserialize上,我先根據它的購物車原理寫了段代碼,代碼如下:

復制代碼 代碼如下:
<?php   
    header("Content-type: text/html; charset=utf-8");   
    $magic = get_magic_quotes_gpc() ? "開啟" : "未開啟";   
      
    $str = array(array('goods_id'=>13,'number'=>1));   
    setcookie("cart", serialize($str));   
    echo "magic_quotes_gpc: ".$magic."<br>";   
    echo $_COOKIE['cart']."<br>";   
    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是無法反序列化成功的,就出現了問題.

解決的辦法簡單來說就是將unserialize($_COOKIE['cart'])改成unserialize(stripslashes($_COOKIE['cart'])),在COOKIE前加上stripslashes,去掉轉義符,這樣就沒問題了.

對于cookie影響我們再做個測試:

1.問題:項目數據需要序列化保存在cookie中,然后再獲得cookie的數據反序列,獲得原數據,代碼如下:

復制代碼 代碼如下:
$a[0] = array("key"=>"哈  邏");  
$a[1] = array("key"=>"哈 邏");  
$jsona = json_encode($a);  
setcookie("testcookie","");
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("testcookie","");  
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開啟情況.

 

① 在開啟情況下,處理數據需要stripslashes

② 在沒有開啟情況下,接受數據先addslashes,處理數據stripslashes

希望本文所述對大家的PHP程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产亚洲精品激情一区二区三区 | 亚洲女人国产香蕉久久精品 | 3d蒂法受辱在线播放 | 欧美特黄特色aaa大片免费看 | 大胸美女被c | 免费视频左左视频 | 国内精品久久久久久野外 | 免费观看视频在线播放 | 久久精品热在线观看30 | 亚洲高清无在码在线电影 | 婷婷色综合网 | japanese超丰满人妖 | 五月婷婷在线免费观看 | 日本中出视频 | 激情亚洲天堂 | 国产精品一级香蕉一区 | 无耻之徒第十一季在线观看 | 天天干天天色综合网 | 胸大的姑娘中文字幕视频 | 性欧美sexvideo另类 | 成人福利影院 | 国产清纯91天堂在线观看 | 亚洲精品在线免费观看视频 | 国产视频二区 | 亚洲+国产+图片 | 亚洲大尺码 | 精品久久免费观看 | 成年人在线免费观看视频网站 | 免费人成网址在线观看国内 | 欧美一级久久久久久久大片 | 欧美综合国产精品日韩一 | 99视频在线观看视频 | 被巨大黑人的翻白眼 | 久久er国产精品免费观看2 | 欧美日韩亚洲一区二区三区在线观看 | 成人午夜在线视频 | 污文啊好棒棒啊好了 | 国产高清不卡码一区二区三区 | 日韩性大片免费 | 暖暖中国免费观看高清完整版 | 成人伊人青草久久综合网破解版 |