澳门在线威尼斯官方 > 澳门在线威尼斯官方 > 怎么样制止模板使用php代码

原标题:怎么样制止模板使用php代码

浏览次数:117 时间:2019-12-01

第生龙活虎作者要捉弄一个标题:为何在腾讯网透露的稿子总是被别的网址访谈过去,而她们搜罗过去后,排行比和讯辛亏,例如那篇随笔,笔者把标题复制到百度寻觅,结果第风姿洒脱页的搜索结果全部是搜集本人的,而本身在博客园宣布的那篇小说竟然直接未有选择,大男士啊,搞通晓好吧,作者那是原创文章。

如题,在微微连串中,大家必要把模版开放给第三方顾客编辑,那么那时模板里面能动用php代码,将会是很主要的安全隐患。

那就是说什么样防止模板里面使用php代码呢?官方还未提交三个配备项,那是很可惜的意气风发件事情,不可能,那么大家只能和谐修正代码制止模板使用php了。

 

1、禁止模板使用<?php ?>标签,通过以下配置项完结

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

 

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

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

注明大概21行的代码,意思正是注释php的解析标签,那样那一个标签就可以被形容输出,不会被剖判:

图片 1

 

3、禁绝模板使用<if> 和 <elseif> 标签

出于if 标签和 elseif 标签里面能够选用函数,所以她们三个风度翩翩律很危殆。供给禁绝

开发布文书件:ThinkPHP/Library/Think/Template/TagLib/Cx.class.php

评释差不离24、25行代码:

图片 2

 

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

像这么的函数用法,纵然方便人民群众,不过我们雷同要禁止,不然照旧存在安全祸患,因为能够把须求施行的函数写在|前边啊。

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

找到 parseVarFunction 函数,大致566行。根据自个儿上面包车型客车图纸相仿注释

图片 3

 

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

如{:phpinfo(卡塔尔(قطر‎}、等  在冒号前边能够写,大肆别变化量,和大肆函数,这么些也很危急。相近必要隐瞒

①先自定义三个大局config 'TEMP_SAFE' => '1',

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

②展开文件:ThinkPHPLibraryThinkTemplate.class.php

赶到大致479行,把之类代码:

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 '';
        }

替换成:

    $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.';?>';
                    }
            }

 

6、应对$Think和|函数被深入分析

开荒文件:ThinkPHPLibraryThinkTemplate.class.php

寻觅代码:

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

改成

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

搜索:

if(count($varArray)>0)

改成:

if(count($varArray)>0 and $safe!='1')

 

开荒文件:ThinkPHPLibraryThinkTemplateTagLib.class.php

搜索:

 

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

 

改成:

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

完成

 

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:怎么样制止模板使用php代码

关键词:

上一篇:何以在centos操作系统上揭橥

下一篇:没有了