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 相关文章推荐
让你同时上传 1000 个文件 (二)
Oct 09 PHP
php 保留字列表
Oct 04 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
php实现统计邮件大小的方法
Aug 06 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
10个简化PHP开发的工具
Dec 25 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 PHP
PHP聊天室简单实现方法详解
Dec 08 PHP
详解php中流行的rpc框架
May 29 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
Terran魔法科技
2020/03/14 星际争霸
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
如何使用动态共享对象的模式来安装PHP
2006/10/09 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
从0开始的Python学习016异常
2019/04/08 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
数控专业毕业生求职信范文
2013/09/21 职场文书
法人代表任命书范本
2014/06/05 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
毕业典礼主持词
2015/06/29 职场文书
vue elementUI批量上传文件
2022/04/26 Vue.js