Thinkphp模板开放给第三方编辑权限时

作者: 网络编程  发布:2019-09-14

先是自身要戏弄二个主题材料:为啥在新浪公布的篇章总是被其他网址访谈过去,而他们搜罗过去后,排行比腾讯网万幸,比方那篇小说,我把标题复制到百度寻找,结果第一页的搜求结果全都是搜罗自个儿的,而笔者在新浪发表的那篇小说竟然直接未有援引,小弟们啊,搞精通好啊,笔者那是原创小说。

如题,在稍微类别中,大家须求把模版开放给第三方顾客编辑,那么此时模板里面能使用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')

完成

 

本文由金沙澳门官网发布于网络编程,转载请注明出处:Thinkphp模板开放给第三方编辑权限时

关键词: 金沙澳门官网

上一篇:【金沙澳门官网】登录验证码
下一篇:没有了