返回列表 发帖
查看: 3863|回复: 2

[新问题] 模板解析文件source/class/class_template.php中这句代码有严重漏洞:

12

主题

87

回帖

220

积分

应用开发者

贡献
1 点
金币
71 个
发表于 2019-7-30 16:44:38 | 显示全部楼层 |阅读模式
BUG反馈
程序版本: X3.4
浏览器: Chrome 
BUG地址: 隐藏内容
BUG截图: -
测试用户名: 隐藏内容
测试密码: 隐藏内容
模板解析文件source/class/class_template.php中这句代码有严重漏洞:
  1. $template = preg_replace("/"(http)?[\w\.\/:]+\?[^"]+?&[^"]+?"/e", "\$this->transamp('\\0')", $template);
复制代码
上面这句代码的意思是template.htm中双引号中且有?号且有&号, 把&强制替换成& 后面调用替换的transamp函数:
  1. function transamp($str) {
  2.                 $str = str_replace('&', '&', $str);
复制代码

我以前经常由于改了模板代码后出现BUG,不明白原因,今天才找到原因:
比如htm模板中的代码是这句:
  1. <a href="home.php?mod=space&uid={if $a > 0 && $a < 9}100{/if}">UID</a>
复制代码
经过上面函数替换后就会变成:
  1. <a href="home.php?mod=space&amp;uid={if $a > 0 &amp;&amp; $a < 9}100{/if}">UID</a>
复制代码
这句 {if $a > 0 &amp;&amp; $a < 9} 就会导致整个PHP程序全部崩溃,不信你们可以随便测试下, 比如在 template/default/search/thread_list.htm 中随便给 href="xxxx.php?xxx&aaa={if $a > 0 && $a < 9}100{/if}"
(替换满足的条件时双引号中, 且存在?号 且存在&符号)

,然后再去搜索, 网站崩溃!
然后查看搜索模板的缓存文件 data/template/1_1_search_forum.tpl.php 变成了:
  1. $a > 0 &amp;&amp; $a < 9
复制代码
这种错误代码






我知道答案 回答被采纳将会获得1 贡献 已有2人回答
回复

使用道具 举报

12

主题

87

回帖

220

积分

应用开发者

贡献
1 点
金币
71 个
 楼主| 发表于 2019-7-30 16:45:46 | 显示全部楼层
本帖最后由 jiangchuankyo 于 2019-7-30 17:37 编辑

是否可以直接去掉上面第一句, 会不会引起其它什么问题?
因为涉及模板解析 然后还会生成缓存文件, 不敢乱改, 有技术人员吗, 麻烦告知下
回复 支持 反对

使用道具 举报

12

主题

87

回帖

220

积分

应用开发者

贡献
1 点
金币
71 个
 楼主| 发表于 2019-7-30 17:35:14 | 显示全部楼层
这里也有人反应过双引号中的&会被替换成&amp;形成BUG:
https://segmentfault.com/q/1010000012990218
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 关注公众号
  • 有偿服务微信
  • 有偿服务QQ

手机版|小黑屋|Discuz! 官方交流社区 ( 皖ICP备16010102号 |皖公网安备34010302002376号 )|网站地图|star

GMT+8, 2024-5-7 14:46 , Processed in 0.181457 second(s), 7 queries , Redis On.

Powered by Discuz! W1.0 Licensed

Cpoyright © 2001-2024 Discuz! Team.

关灯 在本版发帖
有偿服务QQ
有偿服务微信
返回顶部
快速回复 返回顶部 返回列表