下一次重逢,将是何年何月?天空必将见证。 收藏本站
登陆 / 注册 搜索

阅读:592   回复: 4

Discuz 附件名符号&会变成&

原创 [复制链接]
小执念 古黑浩劫论坛大牛 2022-12-9 14:14 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
在Discuz上传附件文件时,会把html字符 <> & " ' 转换成html实体字符,这样的好处是防止一些恶意用户写入JavaScript代码,造成安全隐患,如:XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等。

在论坛上传附件时(上传的文件名会保存在数据库里面,所以我们只要找到在什么地方写入数据库,就能修改啦),系统会把名字为 图片&视频.zip 的附件改成
  1. 图片&amp; 视频.zip
复制代码

Discuz 附件名符号&会变成&amp; 上传.jpg 👨‍🚒‎🩲🪣😈👃
看样子是系统转换html字符出现了BUG,导致 & 被转移了多次。

开始定位问题。

通过浏览器网络请求发现上传相关的URL为:🧑‍🌾‌👗📞🤡🤞
  1. misc.php?mod=swfupload&action=swfupload&operation=upload&fid=
复制代码

那就在系统代码里面找到文件:
  1. source/module/misc/misc_swfupload.php
复制代码

Discuz 附件名符号&会变成&amp; Image 2.jpg
找到关键代码:
🤝⛴🍧❌🦋‎
  1. new forum_upload()
复制代码

继续找到文件:
  1. source/class/forum/forum_upload.php
复制代码


Discuz 附件名符号&会变成&amp; Image 3.jpg 🧒‎👙🔌😳👈
看到是130 行这里定义了文件名,其中 $upload->attach['name']就是文件名,继续查下看,找到文件:
  1. source/class/discuz/discuz_upload.php
复制代码


Discuz 附件名符号&会变成&amp; Image 4.jpg
发现43行这里也对文件名进行了一次转换,所以开头问题就找到了。🥷‎🛍⚔😍🤟

因为 discuz_upload.php 是最后加载的,我们保留这里的转换功能,去掉前面 forum_upload.php 的转换:

  1. source/class/forum/forum_upload.php
复制代码

这个文件的 130 行👨‍🎨‎👠💉😃👃

  1. 'filename' => dhtmlspecialchars(censor($upload->attach['name'])),
复制代码


修改改成:
  1. 'filename' => censor($upload->attach['name']),
复制代码

👀🗽🌰‼🐟‌


Discuz 附件名符号&会变成&amp; 图片上传问题.jpg
问题解决,保留了安全过滤功能,也能正常显示。

上一篇
下一篇
帖子热度 632 ℃

八卦奇迈 「初入古黑」 2022-12-9 14:14 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

众所周知‍‍,蝉的翅膀非常薄‍‍,到底有多薄呢‍?薄如蝉翼😅
叶无道 「龙战于野」 2022-12-9 15:10 |显示全部楼层

遇事不决,可问春风!

👩‌👗🛏🥰✍
我这个forum_upload.php怎么跟你的不一样啊

  1. $filename = censor($upload->attach['name'], NULL, TRUE);
  2. if(is_array($filename)) {
  3. return $this->uploadmsg(12);
    🦴🌡🧊❌🐶‍
  4. } else {
  5. $filename = dhtmlspecialchars($filename);

  6. }
复制代码


👈🌧🧊❓🦠‍
我是应该把else的

$filename = dhtmlspecialchars($filename);
🧑‍💻‎👜🧯🥱👊

改成

$filename = $filename

👨‍🎨‌💄💰💩🤛
吗?

forum_upload.zip (1.9 KB )
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

快速回复 返回列表