去评论
dz插件网

Discuz! X3.4 附件无法删除问题排查指引

admin
2023/01/29 22:58:38
一. 问题背景:

在 Discuz! X3.4 Release 20221220 版本中引入了针对附件删除接口的 CSRF 规避措施,由于手机版部分插件、模板以及部分 PC 插件自行实现了附件删除接口调用,因此可能导致该部分插件、模板使用异常。
本排查指引将告知如何排查相关问题。

二. 模板无法删除附件排查
1. 在 template 目录下找到出现问题的模板文件夹,将文件夹下载到本地计算机,并做好备份。
2. 使用 EditPlus / Notepad++ 等工具对整个文件夹下的所有文件进行搜索,搜索关键词为 deleteattach 。
3. 如果可以找到 deleteattach,则参考以下示例代码对文件进行修改。
4. 修改完成后将文件夹上传回服务器,在后台更新缓存后再试。

例如修改之前的代码:
  1. url:'forum.php?mod=ajax&action=deleteattach&inajax=yes&aids[]=' + obj.attr('aid'),
修改后:
  1. url:'forum.php?mod=ajax&action=deleteattach&inajax=yes&formhash={FORMHASH}&aids[]=' + obj.attr('aid'),

三. 插件无法删除附件排查
1. 在 source/plugin 目录下找到出现问题的插件文件夹,将文件夹下载到本地计算机,并做好备份。
2. 使用 EditPlus / Notepad++ 等工具对整个文件夹下的所有文件进行搜索,搜索关键词为 deleteattach 。
3. 如果可以找到 deleteattach,则参考以下示例代码对文件进行修改。
4. 修改完成后将文件夹上传回服务器,在后台更新缓存后再试。

例如修改之前的代码:
  1. $url = 'forum.php?mod=ajax&action=deleteattach&inajax=yes&aids[]='.$aid;
修改后:
  1. $url = 'forum.php?mod=ajax&action=deleteattach&inajax=yes&formhash='.FORMHASH.'&aids[]='.$aid;

附录:关闭接口校验
如果实在是无法排查到上述文件,又由于各种原因无法替换插件或者联系插件作者进行升级,可以采取以下方案强制修改代码关闭校验。
关闭附件删除接口安全校验可能导致部分恶意攻击者在网站安插恶意代码导致附件被删除的风险,由此导致的安全风险由站点自行承担。
回退老版本或选择放弃升级新版本不会解除该接口的安全风险,反而由于其他漏洞未被正确修复给站点造成更大的安全风险。

1. 该文件位于 source/module/forum/forum_ajax.php ,请将文件下载到本地计算机,并做好备份。
2. 使用 EditPlus / Notepad++ 等工具对文件进行搜索,搜索关键词为 deleteattach 。
3. 找到下方所指示的代码并按指引进行修改。
4. 修改完成后将文件上传回服务器,在后台更新缓存后再试。

修改前:
  1. if(isset($_GET['aids']) && isset($_GET['formhash']) && formhash() == $_GET['formhash']) {
修改后:
  1. if(isset($_GET['aids'])) {