php 魔法引用magic_quotes_gpc()函數用法

來源:互聯網
上載者:User

magic_quotes_gpc的設定值將會影響通過Get/Post/Cookies獲得的資料


這兩天接入百度SDK處理支付回調時碰到了簽名通不過的情況,簽名規則很簡單,md5(transdata + appkey) 和 接受到的sign比較,請求方式為POST。

於是乎通過php://input記錄下了未經處理資料和記錄下了POST資料,通過日誌查看到結果類似如下:

//未經處理資料transdata={"exorderno":"2014031223","transid":"05514312314566","waresid":1,"appid":"1","feetype":0,"money":1,"count":1,"result":0,"transtype":0,"transtime":"2014-03-12 15:33:19","paytype":401}&sign=xxxx //post資料[transdata] => {\"exorderno\":\"2014031223452345234\",\"transid\":\"05514031215312314566\",\"waresid\":1,\"appid\":\"1\",\"feetype\":0,\"money\":1,\"count\":1,\"result\":0,\"transtype\":0,\"transtime\":\"2014-03-12 15:33:19\",\"paytype\":401}[sign] => xxxx

可見接收到post資料時引號自動轉義了,而程式上未做到該操作,很容易就聯想到伺服器的魔法引用開啟了,查看
php版本

PHP 5.2.14 (cli) (built: Jun 7 2012 20:39:40)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

例子說明:

$data1 = $_POST['aaa'];  $data2 = implode(file('1.txt'));  if(get_magic_quotes_gpc()){     //把資料$data1直接寫入資料庫 (自動轉譯)  }else{     $data1 = addslashes($data1);     //把資料$data1寫入資料庫,用函數(addslashes()轉譯)  }  if(get_magic_quotes_runtime()){     //把資料$data2直接寫入資料庫(自動轉譯)  //從資料庫讀出的資料要經過一次stripslashes()之後輸出,stripslashes()的作用是去掉:\ ,和addslashes()作用相反  }else{     $data2 = addslashes($data2);      //把資料$data2寫入資料庫     //從資料庫讀出的資料直接輸出 }

最關鍵的區別是就是上面提到的2點:他們針對的處理對象不同

magic_quotes_gpc的設定值將會影響通過Get/Post/Cookies獲得的資料

注意的是沒有 set_magic_quotes_gpc()這個函數,就是不能在程式裡面設定magic_quotes_gpc的值。

魔法引用5.4才刪掉的,那極有可能這裡開啟在,查看設定檔確實如此,根據條件開關strip一下即可。

問題很快就解決了,但如果不熟悉這塊可能還需要點時間,之前在CI的全域參數xss設定中有類似的地方,當進行全域處理之後對於這種介面、密鑰可能會帶來一些影響,所以全域參數過濾需要注意點。

矛盾可分為主要矛盾和次要矛盾,我們在程式設計中也常有這種思想,改最少的地方,過濾大部分參數,少數特殊處理。php中把它去掉了並不說明它沒有存在的價值,有了魔法引用少了很多注入,但同時也讓一些東西變得混亂,哪裡需要轉義,要怎麼轉義,通過什麼方式來轉義等等。客觀看待,汲取中間有用的部分

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.