与往常一样,关于使用 eval()
的任何讨论的底线是:最好避免在有其他方法的地方尽可能多地使用它,因为它很棘手和危险的;这就是为什么我从来没有兴趣阅读它,直到现在......
我试图通过使用 eval(base64_decode())
的某些website对一个简单函数进行编码,它对这个函数进行了模糊处理:
<?php
echo 'Hello There!<hr />';
for( $i = 1; $i <= 10; $i++ ) {
echo( '5x'.$i.'='.(string)($i*5)."\n" . '<br />' );
}
?>
当我在本地计算机上测试编码输出时,它的工作方式与它应该完全相同,然而我尝试使用其他两个网站(ddecode,tools4noobs)对其进行解码如果我用eval()
&gt;&gt;&gt;
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()
将相同的函数编码到不同的输出中,如果解码它也会返回相同的函数。
非常感谢提前。