php中eval函数的危害与正确禁用方法


Posted in PHP onJune 30, 2014

php的eval函数并不是系统组件函数,因此我们在php.ini中使用disable_functions是无法禁止它的。

但是eval()对于php安全来说具有很大的杀伤力,因此一般不用的情况下为了防止类似如下的一句话木马入侵,需要禁止!

<?php eval($_POST[cmd]);?>

eval()使用范例:

<?php
$string = '杯子';
$name = '咖啡';
$str = '这个 $string 中装有 $name.<br>';
echo $str;
eval( "$str = "$str";" );
echo $str;
?>

本例的传回值为:

这个 $string 中装有 $name.
这个 杯子 中装有 咖啡.

或更高级点的是:

<?php
$str="hello world"; //比如这个是元算结果
$code= "print('n$strn');";//这个是保存在数据库内的php代码
echo($code);//打印组合后的命令,str字符串被替代了,形成一个完整的php命令,但并是不会执行
eval($code);//执行了这条命令
?>

对于上面的咖啡的例子,在eval里面,首先字符串被替换了,其次替换完后形成一个完整的赋值命令被执行了.
 
这类小马砸门的情况是需要禁止掉的!
然而网上很多说使用disable_functions禁止掉eval的方法都是错误的!
其实eval()是无法用php.ini中的disable_functions禁止掉的 :
because eval() is a language construct and not a function

eval是zend的,因此不是PHP_FUNCTION 函数;

那么php怎么禁止eval呢?

如果想禁掉eval可以用php的扩展 Suhosin
安装Suhosin后在php.ini中load进来Suhosin.so,再加上suhosin.executor.disable_eval = on即可!

总结,php的eval函数在php中是无法禁用的,因此我们也只有使用插件了!

PHP 相关文章推荐
在PHP中利用XML技术构造远程服务(下)
Oct 09 PHP
PHP脚本的10个技巧(1)
Oct 09 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
PHP CURL模拟GET及POST函数代码
Apr 25 PHP
PHP中exec与system用法区别分析
Sep 22 PHP
php动态添加url查询参数的方法
Apr 14 PHP
php利用事务处理转账问题
Apr 22 PHP
php检查页面是否被百度收录
Oct 28 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
PHP基于Closure类创建匿名函数的方法详解
Aug 17 PHP
yii2.0框架场景的简单使用示例
Jan 25 PHP
PHP登录环节防止sql注入的方法浅析
Jun 30 #PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
Jun 30 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 #PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 #PHP
PHP数字和字符串ID互转函数(类似优酷ID)
Jun 30 #PHP
PHP把数字转成人民币大写的函数分享
Jun 30 #PHP
You might like
ip签名探针
2006/10/09 PHP
PHP控制网页过期时间的代码
2008/09/28 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
详解Python中的join()函数的用法
2015/04/07 Python
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
python3获取url文件大小示例代码
2019/09/18 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
简单了解Django项目应用创建过程
2020/07/06 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
大学新闻系自荐书
2014/05/31 职场文书
预备党员群众意见
2015/06/01 职场文书
城南旧事观后感
2015/06/11 职场文书
环保守法证明
2015/06/24 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS