- ·上一篇文章:cookie防止仿造安全总结
- ·下一篇文章:XML 中的特殊字符
php正则问题
preg_match_all("/\{([^\{\}]+\(.*?\)[^\{\}]*)\}/s",$str,$tmp_array); $tmpstr=implode(' ',$tmp_array[1]); preg_match_all("/([a-zA-Z0-9_\x7f-\xff]+)\(/",$tmpstr,$tmp_array); $tmp_array=array_unique($tmp_array[1]); $funerr=0; if(is_array($tmp_array)){ foreach($tmp_array as $value){ if(substr($value,0,4)!='tag_'){ echo "$value
"; $funerr++; } }
$funerr && exit("该模板中调用了上述不允许的函数,模板编译失败!"); } 上面是代码,功能是检查 {模板标记} 中任何方式调用函数的函数名称是不是以 tag_ 带头。成功测试的方式有 {tag_cut();phpinfo()} {if $abc=1 phpinfo()} {loop phpinfo() $a} 想不出其他测试方式了,反正不管什么乱七八糟的调用方式,都能被检查出来! 模板中嵌入php代码在开始中用 $str=preg_replace("/\<\?.*\?\>/sU","",$str); 除去了。经本人多次测试,好像模板中是没有办法调用非 tag_为前缀的函数了。 欢迎大家继续测试!

