最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
php 魔法引用magic_quotes_gpc()函数用法
时间:2022-06-24 19:50:15 编辑:袖梨 来源:一聚教程网
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中把它去掉了并不说明它没有存在的价值,有了魔法引用少了很多注入,但同时也让一些东西变得混乱,哪里需要转义,要怎么转义,通过什么方式来转义等等。客观看待,汲取中间有用的部分
相关文章
- 以闪亮之名店长体验流霞季怎么玩 缘溪临霞套装活动介绍 12-31
- 未定事件簿旧梦新生左然篇怎么玩 旧梦新生左然篇活动介绍 12-31
- 未定事件簿左然破浪远行怎么样 12-31
- 桃源深处有人家行医问诊怎么玩 12-31
- 恋与制作人跨年福利有哪些 恋与制作人跨年福利内容介绍 12-31
- 阴阳师协同对弈大乱斗怎么玩 阴阳师协同对弈大乱斗活动介绍 12-31