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 默默经典版本
Aug 04 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 PHP
将php数组输出html表格的方法
Feb 24 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
php表单提交与$_POST实例分析
Jan 26 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
深入理解PHP变量的值类型和引用类型
Oct 21 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 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
文件系统基本操作类
2006/11/23 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
接收键盘指令的脚本
2006/06/26 Javascript
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
js实现tab切换效果
2017/02/16 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
vue将data恢复到初始状态 &amp;&amp; 重新渲染组件实例
2020/09/04 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
SQLite3中文编码 Python的实现
2017/01/11 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
英国领先的游戏零售商:GAME
2019/09/24 全球购物
大学生专科学习生活的自我评价
2013/12/07 职场文书
管理建议书范文
2014/05/13 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS