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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
PHP新手上路(十)
Oct 09 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
May 04 PHP
分享一段php获取linux服务器状态的代码
May 27 PHP
php生成RSS订阅的方法
Feb 13 PHP
php简单统计字符串单词数量的方法
Jun 19 PHP
简单了解WordPress开发中update_option()函数的用法
Jan 11 PHP
php socket通信简单实现
Nov 18 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
Apr 20 PHP
PHP实现微信对账单处理
Oct 01 PHP
Laravel框架中缓存的使用方法分析
Sep 06 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
NOT NULL 和NULL
2007/01/15 PHP
php使用curl访问https示例分享
2014/01/17 PHP
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
python实现倒计时的示例
2014/02/14 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
Atom的python插件和常用插件说明
2018/07/08 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
python用700行代码实现http客户端
2021/01/14 Python
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
银行个人求职自荐信范文
2013/12/16 职场文书
自动化专业个人求职信范文
2013/12/30 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
教师自我反思材料
2014/02/14 职场文书
工作失职检讨书500字
2014/10/17 职场文书
离职报告格式
2014/11/04 职场文书
实训报告范文大全
2014/11/04 职场文书
会议通知
2015/04/15 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
考研英语辞职信
2015/05/13 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis