PHP权限chmod 1703配置下jsPsych实验数据存储安全及GDPR合规咨询
现有方案存在的明显安全问题
- 路径遍历漏洞:代码直接使用前端传递的
data_dir和file_name参数拼接写入路径,攻击者可构造包含../的参数值,将文件写入服务器任意可写目录,甚至写入.php后缀的恶意脚本,直接获取服务器权限。 - 明文存储风险:实验数据直接以明文JSON格式写入文件,若包含参与者的个人敏感信息,完全不符合GDPR对个人数据加密存储的要求,一旦存储目录被遍历下载,会直接造成大规模数据泄露。
- 权限配置隐患:703/1703的目录权限意味着所有服务器用户都对该目录有写入权限,同服务器的其他站点如果被攻破,攻击者可直接写入恶意文件到你的数据目录,也可篡改、窃取已存储的实验数据。
- 缺失输入校验:没有对
exp_data的格式、大小做校验,也没有验证请求是否来自合法的实验流程,攻击者可批量提交垃圾数据,占满服务器磁盘空间。 - CORS配置漏洞:当前仅放开了指定Qualtrics域名的跨域请求,但没有做额外的请求来源校验,该域名下的其他页面也可发起恶意请求调用你的保存接口。
可快速落地的优化建议
以下方案改动量小,无需复杂的安全知识储备,可短时间内完成优化:
- 硬编码固定写入路径:不要从前端传递
data_dir参数,直接在PHP代码中写死数据存储的绝对路径,彻底杜绝路径遍历风险。 - 严格校验文件名规则:仅允许文件名使用字母、数字、下划线,禁止所有特殊字符和路径符号,强制固定
.json后缀,禁止自定义文件后缀,参考校验代码:
// 校验文件名字符合法性 if (!preg_match('/^[a-zA-Z0-9_]+$/', $_POST['file_name'])) { http_response_code(403); exit; } $file_name = $_POST['file_name'] . '.json';
- 加密存储敏感数据:如果数据中包含GDPR定义的个人可识别信息,写入文件前用AES对称加密对
exp_data内容做加密,密钥自行保存在PHP代码中,不要对外泄露。 - 调整目录存储位置:把数据存储目录放到Web站点的根目录之外,确保外部用户无法通过URL直接访问下载目录内的文件;目录权限保留1703粘滞位配置,避免其他用户篡改已写入的文件。
- 增加简单的请求校验:前端发起保存请求时额外携带一个固定的校验密钥参数,PHP端收到请求先校验密钥是否匹配,不匹配直接拒绝请求,过滤无关的恶意调用。
适合新手的学习方向
- 优先了解Web常见输入校验、路径处理相关的安全基础,重点关注文件读写场景的常见漏洞防护逻辑。
- 针对GDPR合规,可先熟悉个人可识别信息的判定标准,以及个人数据加密存储、访问权限控制的基本要求。
- 后续如果需要长期维护类似实验系统,可逐步了解PHP安全开发规范、Web应用常见漏洞的防御方法。
内容的提问来源于stack exchange,提问作者M.L.
相关产品推荐
相关产品推荐

