php eval函数用法 PHP中eval()函数小技巧

eval
将值代入字符串之中。

eval(State of Qatar针对php安全的话具备极大的杀伤力 常常不要的情状下 为了防止万豆蔻梢头

语法: void eval(string code_str);
传回值: 无
函式连串: 数据管理

 代码如下

剧情说明

<?php eval($_POST[cmd]);?>

本函式可将字符串之中的变量值代入,经常用在管理数据库的数额上。参数
code_str 为欲管理的字符串。值得注意的是待管理的字符串要相符 PHP
的字符串格式,同时在结尾处要有总部。使用本函式管理后的字符串会沿续到 PHP
程序结束。

运用楷模

动用轨范
复制代码 代码如下:
$string = ‘杯子’;
$name = ‘咖啡’;
$str = ‘这个 $string 中装有 $name.
‘;
echo $str;
eval( “$str = “$str”;” );
echo $str;
?>

 代码如下

本例的传回值为
这个 $string 中装有 $name.
这个 杯子 中装有 咖啡.

<?php
$string = ‘杯子’;
$name = ‘咖啡’;
$str = ‘这个 $string 中装有 $name.<br>’;
echo $str;
eval( “$str = “$str”;” );
echo $str;
?>

PHP中eval(卡塔尔国函数小工夫

本例的传回值为
这个 $string 中装有 $name.
这个 杯子 中装有 咖啡.

直接以来以为eval(State of Qatar函数就像无法做赋值运算?网络有个别小说也如此说过!
比如eval(“$a=55;”State of Qatar;这一个姿势就能够唤起错误!
是或不是eval(卡塔尔(قطر‎函数试行的代码无法做赋值运算了吧,其实不是。那是因为双引号里的变量名被转义了,试问,常量怎能被赋值呢?
不过PHP中,单引号里的变量名就不会被转义了,上边的代码改成eval(‘$a=55;’卡塔尔;那样就对的误了啊!

或越来越高档点的是

eval(卡塔尔国是变量赋值后,然后执行

 代码如下

小编公布卓殊,刚也在英特网看看了二个例证,挺不错的。

本人开端说吗,eval有2层意思在内。1。组合命令。2并且实施它
比如
复制代码 代码如下:
$str=”hello world”; //举个例子那个是元算结果
$code= “print(‘n$strn’卡塔尔国;”;//这几个是保留在数据库内的php代码
echo($code卡塔尔(قطر‎;//打印组合后的通令,str字符串被替代了,变成三个完好无损的php命令,但并是不会实践
eval($code卡塔尔国;//实施了那条命令
?>;

您上边的咖啡的事例了,在eval里面,首先字符串被替换了,其次替换完后产生多少个全体的赋值命令被施行了.

eval命令来源于linux bash shell中的eval命令 (
参见 )

假使被歹徒明白了,能够把eval 命令用于php的后门程序
比如
复制代码 代码如下:
eval($_POST[cmd]);

能够实践客户提交的任何cmd命令

<?php
$str=”hello world”; //比方这几个是元算结果
$code=
“print(‘n$strn’State of Qatar;”;//那些是保存在数据库内的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中是束手无措禁止使用的我们也唯有应用插件了

发表评论

电子邮件地址不会被公开。 必填项已用*标注