php中eval函数的危害与正确禁用方法

转载地址:http://www.myhack58.com/Article/60/61/2014/50632.htm
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中是无法禁用的,因此我们也只有使用插件了!

时间: 2024-10-11 10:32:52

php中eval函数的危害与正确禁用方法的相关文章

JavaScript中eval函数

JavaScript中eval函数是检查 JavaScript代码并执行. 使用方法: eval(codeString) 其中必选项 codestring 参数是包含有效 JScript 代码的字符串值.这个字符串将由 JScript 分析器进行分析和执行. eval 函数允许 JScript 源代码的动态执行.例如,下面的代码创建了一个包含 Date 对象的新变量 mydate :http://www.hrbfc120.com eval("var mydate = new Date();&qu

JavaScript中Eval()函数的作用

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->首先来个最简单的理解 eval可以将字符串生成语句执行,和SQL的exec()类似. eval的使用场合是什么呢?有时候我们预先不知道要执行什么语句,只有当条件和参数给时才知道执行什么语句,这时候eval就派上用场了.举个例子: 我们要做一个function(),功能是输入网页中两个个对象的名称,然后程

在C++工程中main函数之前跑代码的廉价方法(使用全局变量和全局函数)

[cpp] view plain copy // test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h> #include <crtdbg.h> /// 在C++工程中main函数之前跑代码的廉价方法 /// 利用全局变量可以赋可变初值的事实 /// mainCRTStartup() => _cin

(转)在网页中JS函数自动执行常用三种方法

原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   } </SCR

在网页中JS函数自动执行常用三种方法

在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   }  </SCRIPT> 下面,我们就针对上面的函数,让其在网页载入的时候自动运行! ①第一种方法 将如上代码改为: <SCRIPT   LANGUAG

关于PHP中eval函数的返回值

关于eval 的概念就是把字符串作为PHP代码执行.但是关于其返回值,有时候容易出错. 如下面定义一个函数 function get_func_type(){ return array(1=>'字符串处理','2'=>'数组处理'); } 你能正确说出例1,例2,例3的执行结果吗? 例1 $p=eval('get_func_type();'); trace($p); 例2 $p=eval('return get_func_type();'); trace($p); 例3 eval('$p=ge

php中eval函数用法介绍

黑客用得最多的一句了,可以解析php.很多木马文件都是这样做的, 上面是一个php大马文件, eval() 函数把字符串按照 PHP 代码来计算. 该字符串必须是合法的 PHP 代码,且必须以分号结尾. 如果没有在代码字符串中调用 return 语句,则返回 NULL.如果代码中存在解析错误,则 eval() 函数返回 false. 由于安全原因,不建议大家在开发中使用. 下面一句最简单的代码,风险超级高,我们有时会看到自己的网站有这么一句: eval($_POST[cmd]);#这个就是php

JavaScript中eval()函数的使用

eval()函数可以将字符串解析为javascript代码执行. var str = "alert('hello world');"; alert(str); //alert('hello world');eval(str); //hello world eval()函数常用于将json字符串解析为json对象. var jsonStr = "{'name':'bossLiu','age':27}"; alert(jsonStr.name); //undefined

python中eval函数作用

eval函数就是实现list.dict.tuple与str之间的转化str函数把list,dict,tuple转为为字符串一.字符串转换成列表 a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" print(type(a)) b = eval(a)print(type(b)) print(b) 二.字符串转换成字典 a = "{1: 'a', 2: 'b'}" print(type(a)) b = eval(a) print(type