1

与往常一样,任何关于使用的讨论的底线eval()是:最好在有其他方法的地方尽可能避免使用它,因为它既棘手又危险;这就是为什么我从来没有兴趣阅读它,直到现在..

我试图通过一些使用的网站eval(base64_decode())来编码一个简单的函数,它混淆了这个函数:

<?php
    echo 'Hello There!<hr />';
    for( $i = 1; $i <= 10; $i++ ) {
        echo( '5x'.$i.'='.(string)($i*5)."\n" . '<br />' );
    }
?>

当我在本地机器上测试编码输出时,它的工作方式与应有的完全一样,但是我尝试使用其他两个网站(ddecodetools4noobs )对其进行解码,结果完全不同,如果我替换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()将相同的函数编码为不同的输出,如果解码它返回相同的函数。

提前谢谢了。

4

0 回答 0