OS Ticket提交工单后页面顶部出现CSRF Token数组输出错误
这事儿我遇过好几次,明显是代码里留了调试输出语句没清理——比如print_r()、var_dump()这类打印数组的代码,在工单提交的处理流程里被执行了,直接把POST参数数组输出到页面顶部了。
给你一步步解决的思路:
先定位输出的来源文件
输出的数组里包含工单提交的所有参数(CSRFToken、邮箱、主题、消息内容),说明输出点在工单提交的处理逻辑里。优先检查这几个核心文件:- 前台提交的话看
open.php(用户提交工单的页面处理文件) - 工单核心处理逻辑在
include/class.ticket.php - 如果你最近装了新插件,一定要排查插件的代码——很多时候第三方插件的调试代码没删干净会出这问题
- 前台提交的话看
找到并移除调试语句
在上述文件里搜索print_r(、var_dump(或者echo这类会打印数组的代码,找到打印这个POST参数数组的行,直接注释掉或者删除就行。比如如果看到print_r($_REQUEST);或者var_dump($this->getFormData());这类代码,那就是罪魁祸首。排查CSRF相关代码
数组里有CSRFToken,也有可能是在CSRF验证的代码段里加了调试输出。可以检查include/class.csrf.php或者表单提交时的CSRF处理逻辑,看看有没有打印CSRF相关数组的语句。清理缓存确保生效
修改完代码后,如果还是能看到输出,去include/cache/目录下删掉缓存文件,或者重启一下你的Web服务器(比如Apache/Nginx),确保代码修改被加载。
要是实在找不到具体位置,临时开启osTicket的调试模式(生产环境用完立刻关掉!):在include/ost-config.php里添加或者修改define('OST_DEBUG', true);,这样能看到更多错误信息帮你定位,但记得处理完改回false,避免泄露敏感信息。
内容的提问来源于stack exchange,提问作者user4282187

