+ -
当前位置:首页 → 问答吧 → 求助一个eval的简单问题

求助一个eval的简单问题

时间:2011-12-05

来源:互联网

PHP code

$t = 'echo "<p>: $te </p>";';
$te = 'etst';
eval ($t);


如上..我想达到的效果就是上面的结果..
eval太危险了..有没有别的办法呀.
在线等!

作者: wc1217   发布时间: 2011-12-05

eval 没有什么危险的,他执行的都是你自己构造的代码。
如果连自己都成了危险,那我也就无语了

如果将同样的代码写入文件,然后 include 进来。按你的观点是否就安全了呢?

eval 唯一的缺点是他所执行的代码未经预编译,临时编译必然影响效率

当然并不是非要用 eval 的,比如PHP code
$t = '<p>: $te </p>';
$te = 'etst';

echo preg_replace('/\$\w+/ise', '$0', $t);

输出 <p>: etst </p>

有点“模板”的味道了

作者: xuzuning   发布时间: 2011-12-05

哎...看来没有什么简便方法了.
eval里的数据是ajx过来的..不敢直接eval.
只有正则了

作者: wc1217   发布时间: 2011-12-05

eval危险?????

你用到的模板里支持php语法不就靠这个吗

作者: xjl756425616   发布时间: 2011-12-05

不是..eval不危险..是数据不是我自己构的(ajax过来的)...所以危险!

作者: wc1217   发布时间: 2011-12-05

那你加验证呗

作者: RXPY2007   发布时间: 2011-12-05

ajax危险???

作者: xjl756425616   发布时间: 2011-12-05

先过滤下字符嘛!

作者: xjpphp   发布时间: 2011-12-05

类似的就行

PHP code
$code = 'echo 123;mysql_connect("localhost", "root", "root");';

// 获取执行代码中的方法
$r = '#(\w+)\([^)]*\);#';
preg_match_all($r, $code, $funcArr);
//echo '<pre>';print_r($funcArr);exit;
// 设置可以被执行的方法或者不可以被执行的方法等
$allows = array('echo', 'print', 'print_r', 'var_dump');
// 或者
//notAllows = array('mysql_connect', 'unlink', ...);

if($funcArr[1]){
    foreach($funcArr[1] as $func)
    {
        if(!in_array($func, $allows))
        {
            exit('您正要执行无权限的代码,已经终止!');
        }
    }
}

eval ($code);

作者: kyzy_yy_pm   发布时间: 2011-12-05

相关阅读 更多