Thinkphp模板开放给第三方编辑权限制期限,怎么着禁止模板使用php代码

开拓文件:ThinkPHP/Library/Think/Template.class.php

展开文件:ThinkPHP\Library\Think\Template.class.php

如题,在有点项目中,我们须求把模版开放给第二方用户编辑,那么此时模板里面能应用php代码,将会是很重大的安全隐患。

5、禁止语法
{:函数名或变量}

讲授大约21行的代码,意思正是注释php的解析标签,那样这些标签就能够被形容输出,不会被解析:

第3自个儿要吐槽二个题目:为何在微博发表的稿子总是被别的网站采访过去,而他们收罗过去后,排名比和讯幸而,举个例子那篇小说,作者把标题复制到百度查寻,结果第二页的搜索结果全体都以收罗本身的,而本人在今日头条表露的那篇小说竟然间接未有选拔,堂哥们啊,搞明白好呢,笔者那是原创文章。

像那样的函数用法,就算有益于,不过大家壹致要禁止,不然如故存在安全隐患,因为能够把须求实施的函数写在|前边啊。

如{:phpinfo()}、等 
在冒号前边能够写,大肆别变化量,和任性函数,这一个也很凶险。同样供给遮掩

if('$' == $flag && '.' != $flag2 && '(' != $flag2){ //解析模板变量 格式 {$varName}
            return $this->parseVar($name);
        }elseif('-' == $flag || '+'== $flag){ // 输出计算
            return  '<?php echo '.$flag.$name.';?>';
        }elseif(':' == $flag){ // 输出某个函数的结果
            return  '<?php echo '.$name.';?>';
        }elseif('~' == $flag){ // 执行某个函数
            return  '<?php '.$name.';?>';
        }elseif(substr($tagStr,0,2)=='//' || (substr($tagStr,0,2)=='/*' && substr(rtrim($tagStr),-2)=='*/')){
            //注释标签
            return '';
        }
if('Think.' == substr($var,0,6)){

贰开荒文件:ThinkPHP\Library\Think\Template.class.php

'TEMP_SAFE' => '1',    //不解析{:} 与 {$Think}

开荒文件:ThinkPHP/Library/Think/Template/TagLib/Cx.class.php

张开文件:ThinkPHP/Library/Think/Template/TagLib/Cx.class.php

 

完成

改成

图片 1

 

开垦文件:ThinkPHP\Library\Think\Template\TagLib.class.php

图片 2

那么怎么着禁止模板里面使用php代码呢?官方未有交给叁个配置项,那是很不满的壹件业务,无法,那么大家不得不本身修改代码禁止模板使用php了。

$safe    = C('TEMP_SAFE');
if('Think.' == substr($var,0,6) and $safe!='1'){
if(count($varArray)>0 and $safe!='1')

 

if(count($varArray)>0)

搜索:

if('Think.' == substr($name,0,6) and C('TEMP_SAFE')!='1')

肆、禁止模板对变量使用函数,举例{:$addtime|date=”Y-m-d”,###}

来到大致47玖行,把之类代码:

 

批注差不多24、二五行代码:

是因为if 标签和 elseif
标签里面能够运用函数,所以他们七个一样很凶险。供给禁止

陆、应对$Think和|函数被分析

    $safe    = C('TEMP_SAFE');
            if('$' == $flag && '.' != $flag2 && '(' != $flag2){ //解析模板变量 格式 {$varName}
                return $this->parseVar($name);
            }elseif(substr($tagStr,0,2)=='//' || (substr($tagStr,0,2)=='/*' && substr(rtrim($tagStr),-2)=='*/')){
                //注释标签
                return '';
            }elseif($safe !='1'){
                if('-' == $flag || '+'== $flag){ // 输出计算
                        return  '<?php echo '.$flag.$name.';?>';
                    }elseif(':' == $flag){ // 输出某个函数的结果
                         return  '<?php echo '.$name.';?>';
                    }elseif('~' == $flag){ // 执行某个函数
                       return  '<?php '.$name.';?>';
                    }
            }

 

 

图片 3

改成:

找到 parseVarFunction 函数,大概566行。依据本人上边包车型地铁图纸同样注释

 

'TMPL_DENY_PHP'    =>    true,    //禁用原生php

搜索:

壹、禁止模板使用<?php
?>标签,通过以下配置项落成

探求代码:

if('Think.' == substr($name,0,6))

改成:

三、禁止模板使用<if>
和 <elseif> 标签

 

替换成:

一先自定义叁个大局config
‘TEMP_SAFE’ => ‘1’,

 

2、禁止模板使用<php></php>标签

 

发表评论

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

网站地图xml地图