问卷页写着匿名,导出的 CSV 里却有 IP、User-Agent 和登录邮箱,用户拿着导出文件来质问客服。乍看像缓存或者权限的锅,追下去往往不是。
if ($survey->is_anonymous) {
$row['ip'] = '';
$row['email'] = '';
}
追下去是这么回事:提交时统一记录了请求元信息,匿名开关只控制了页面上那个姓名输入框。导出脚本把所有列全量输出,没有区分问卷类型。
「匿名问卷泄露身份」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
具体做法是,匿名问卷提交时把 IP 和邮箱写成空,或者只存哈希;导出时按问卷类型过滤列,匿名问卷直接不给身份列;用未登录和已登录各提交一份,检查导出内容。
验收就看一点,匿名问卷导出文件里没有 IP 和邮箱两列,登录用户提交的也查不到身份。
