与往常一样,任何关于使用的讨论的底线eval()
是:最好在有其他方法的地方尽可能避免使用它,因为它既棘手又危险;这就是为什么我从来没有兴趣阅读它,直到现在..
我试图通过一些使用的网站eval(base64_decode())
来编码一个简单的函数,它混淆了这个函数:
<?php
echo 'Hello There!<hr />';
for( $i = 1; $i <= 10; $i++ ) {
echo( '5x'.$i.'='.(string)($i*5)."\n" . '<br />' );
}
?>
当我在本地机器上测试编码输出时,它的工作方式与应有的完全一样,但是我尝试使用其他两个网站(ddecode,tools4noobs )对其进行解码,结果完全不同,如果我替换eval()
为print()
>>
if(!function_exists("YiunIUY76bBhuhNYIO8")){
function YiunIUY76bBhuhNYIO8($g,$b=0){
$a=implode("\n",$g);$d=array(655,236,40);
if($b==0) $f=substr($a,$d[0],$d[1]);
elseif($b==1)$f=substr($a,$d[0]+$d[1],$d[2]);
else $f=trim(substr($a,$d[0]+$d[1]+$d[2]));
return($f);
}
}
这里发生了什么!是解码失败还是编码数据与我在第一个网站中输入的不同 -例如恶意代码,虽然它看起来输出代表某种编码机制,但如果我错了,它怎么会像它应该的那样工作,并且如果是对的,那么这样的事情不能被解码?
另外,以这种方式使用 eval() 是否安全?考虑到我从一个奇怪的网站获得了编码字符串。还是自己实现比较好?即使base64_encode()
将相同的函数编码为不同的输出,如果解码它返回相同的函数。
提前谢谢了。