Discuz 附件名符号&会变成&原创 |
在Discuz上传附件文件时,会把html字符 <> & " ' 转换成html实体字符,这样的好处是防止一些恶意用户写入JavaScript代码,造成安全隐患,如:XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等。
在论坛上传附件时(上传的文件名会保存在数据库里面,所以我们只要找到在什么地方写入数据库,就能修改啦),系统会把名字为 图片&视频.zip 的附件改成
![]() 👂🗽🌶®🐯看样子是系统转换html字符出现了BUG,导致 & 被转移了多次。 开始定位问题。 ![]() 通过浏览器网络请求发现上传相关的URL为:👨🦱🧥🪟☠✊
那就在系统代码里面找到文件:
![]() 找到关键代码:👩👜🖌😚✋
继续找到文件:
![]() 👏🏠🎂🈸🐋看到是130 行这里定义了文件名,其中 $upload->attach['name']就是文件名,继续查下看,找到文件:
![]() 发现43行这里也对文件名进行了一次转换,所以开头问题就找到了。👴👖🩺😫🧠 因为 discuz_upload.php 是最后加载的,我们保留这里的转换功能,去掉前面 forum_upload.php 的转换:
这个文件的 130 行 🙌🍪⁉🦟
修改改成:
👂🏠🦞📳 ![]() 问题解决,保留了安全过滤功能,也能正常显示。 ![]()
帖子热度 4696 ℃
|
|
🤌⛵🍧💲🐝 我这个forum_upload.php怎么跟你的不一样啊
👄⛪🎂🆒🦌 我是应该把else的 $filename = dhtmlspecialchars($filename); 💪🗺🥛™🐯 改成 $filename = $filename 🧑🎤💎⌨🤤✌ 吗? |