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 相关文章推荐
如何给phpadmin一个保护
Oct 09 PHP
用PHP调用Oracle存储过程
Oct 09 PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
php上传文件,创建递归目录的实例代码
Oct 18 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
Apr 08 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
php快速查找数据库中恶意代码的方法
Apr 01 PHP
php微信开发之谷歌测距
Jun 14 PHP
PHP count_chars()函数讲解
Feb 14 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
PHP中phar包的使用教程
2017/06/14 PHP
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
jquery ajax abort()的使用方法
2010/10/28 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
jquery学习总结(超级详细)
2014/09/04 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
python创建文本文件的简单方法
2020/08/30 Python
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
电子信息科学专业自荐信
2014/01/30 职场文书
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
结婚十年感言
2015/07/31 职场文书
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers