PHPWAF拦截AJAX请求典型表现为fetch或XHR触发403,响应含“WAF Blocked”或为空;主因是WAF对application/json的严格校验误判合法字段为XSS,建议前端避免敏感字符串、服务端预处理、加X-Requested-With头或调整WAF规则白名单。
PHPWAF 拦截 AJAX 请求的典型表现
页面正常访问,但 fetch 或 XMLHttpRequest 发起的请求被 403 拒绝,响应里可能带 WAF Blocked、Request Denied 或空内容;浏览器开发者工具 Network 面板中该请求状态码为 403,且 Response 标签页为空或只有简单提示。这不是 PHP 代码报错,而是 WAF(如 mod_security、Safedog、云 WAF 或某些国产 PHP 插件式 WAF)在 Web 服务器层提前拦截了。
Content-Type: application/json 触发规则最常见
很多 PHPWAF 默认对 Content-Type: application/json 的请求做严格校验,尤其当 JSON 数据含 、>、script、onerror、eval( 等字符串时,哪怕只是合法业务字段(如用户昵称填了 "张三"),也会被误判为 XSS 攻击。
实操建议:
-
前端发送 JSON 时避免在字段值中混入 HTML 标签或 JS 关键字;必要时先
encodeURIComponent或服务端用htmlspecialchars($input, ENT_NOQUOTES, 'UTF-8')预处理 - 临时调试可改用
application/x-www-form-urlencoded提交(例如fetch中用new URLSearchParams({a:1,b:2})),绕过 JSON 规则检测 - 检查 WAF 后台是否启用了「JSON 深度解析」或「AJAX 特征识别」类规则,这类规则往往独立开关
如何让 PHPWAF 放行特定 AJAX 接口
不推荐全局关闭 WAF,应精准放行。路径和请求头是关键识别依据: