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 相关文章推荐
MYSQL数据库初学者使用指南
Nov 16 PHP
PHPMailer安装方法及简单实例
Nov 25 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
PHP中date与gmdate的区别及默认时区设置
May 12 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
Oct 15 PHP
PHP中Header使用的HTTP协议及常用方法小结
Nov 04 PHP
php按单词截取字符串的方法
Apr 07 PHP
php自动加载方式集合
Apr 04 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
PHP微商城开源代码实例
Mar 27 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
php笔记之常用文件操作
2010/10/12 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
php图片加中文水印实现代码分享
2012/10/31 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
php短信接口代码
2016/05/13 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
常用的javascript设计模式
2017/01/11 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
Python内置模块turtle绘图详解
2017/12/09 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
如何获取某个日期是当月的最后一天
2013/12/05 面试题
《小池塘》教学反思
2014/02/28 职场文书
《白鹅》教学反思
2014/04/13 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
银行业务授权委托书
2014/10/10 职场文书
健康状况证明模板
2014/10/23 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫
MySQL自定义函数及触发器
2022/08/05 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL