www.adminn.cn
站长正能量分享网!

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

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

magic_quotes_gpc是用来判断我们apache是不是开启了自动转译功能了,为了让各位更好的理解魔法引用magic_quotes_gpc()函数用法下面来给各位总结与举一些例子.

magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据.

这两天接入百度SDK处理支付回调时碰到了签名通不过的情况,签名规则很简单,md5(transdata + appkey) 和 接受到的sign比较,请求方式为POST.

于是乎通过php://input记录下了原始数据和记录下了POST数据,通过日志查看到结果类似如下:

  1. //原始数据 
  2. transdata={"exorderno":"2014031223","transid":"05514312314566"
  3. "waresid":1,"appid":"1","feetype":0,"money":1,"count":1,"result":0, 
  4. "transtype":0,"transtime":"2014-03-12 15:33:19","paytype":401}&sign=xxxx 
  5.   //开源软件:phpfensi.com 
  6. //post数据 
  7. [transdata] => {\"exorderno\":\"2014031223452345234\",\"transid\"
  8. \"05514031215312314566\",\"waresid\":1,\"appid\":\"1\",\"feetype\":0, 
  9. \"money\":1,\"count\":1,\"result\":0,\"transtype\":0, 
  10. \"transtime\":\"2014-03-12 15:33:19\",\"paytype\":401} 
  11. [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

例子说明:

  1. $data1 = $_POST['aaa'];  
  2.  
  3.  $data2 = implode(file('1.txt'));  
  4.  
  5.  if(get_magic_quotes_gpc()){  
  6.  
  7.     //把数据$data1直接写入<a href="/database/database.html" target="_blank">数据库</a> (自动转译)  
  8.  
  9.  }else{  
  10.  
  11.     $data1 = addslashes($data1);  
  12.  
  13.     //把数据$data1写入数据库,用函数(addslashes()转译)  
  14.  
  15.  }  
  16.  
  17.  if(get_magic_quotes_runtime()){  
  18.  
  19.     //把数据$data2直接写入数据库(自动转译)  
  20.  
  21.  //从数据库读出的数据要经过一次stri<a href="/fw/photo.html" target="_blank">ps</a>lashes()之后输出,stripslashes()的作用是去掉:\ ,和addslashes()作用相反  
  22.  
  23.  }else{  
  24.  
  25.     $data2 = addslashes($data2);  
  26.  
  27.      //把数据$data2写入数据库  
  28.  
  29.      
  30.  
  31.  //从数据库读出的数据直接输出  
  32.  

最关键的区别是就是上面提到的2点:他们针对的处理对象不同,magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据,注意的是没有 set_magic_quotes_gpc()这个函数,就是不能在程序里面设置magic_quotes_gpc的值.

魔法引用5.4才删掉的,那极有可能这里打开在,查看配置文件确实如此,根据条件开关strip一下即可.

问题很快就解决了,但如果不熟悉这块可能还需要点时间,之前在CI的全局参数xss设置中有类似的地方,当进行全局处理之后对于这种接口、密钥可能会带来一些影响,所以全局参数过滤需要注意点.

矛盾可分为主要矛盾和次要矛盾,我们在程序设计中也常有这种思想,改最少的地方,过滤大部分参数,少数特殊处理,php中把它去掉了并不说明它没有存在的价值,有了魔法引用少了很多注入,但同时也让一些东西变得混乱,哪里需要转义,要怎么转义,通过什么方式来转义等等,客观看待,汲取中间有用的部分.

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《php 魔法引用magic_quotes_gpc()函数用法》
文章链接:https://www.adminn.cn/news/6602.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

Adminn.Cn 站长分享圈

帝国CMS精品模板腾讯云优惠券,代金券

本站源码仅供本地环境下学习借鉴研究使用!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏