最有效防范http方法滥用的手段是硬编码白名单并前置拦截:仅允许get、post等必要方法,拒绝非法请求并返回405状态码及allow头,同时禁用_method参数和危险请求头,配合cors严格控制。

直接限制允许的 HTTP 请求方法,是最基础也最有效的防范手段。只要服务器只接受明确列出的方法,攻击者就无法通过伪造头或参数绕过验证——因为底层根本不会处理非法方法。
明确声明允许的方法列表
在路由或中间件入口处硬编码白名单,拒绝所有不在列表中的请求。不要依赖框架默认行为,Micro、Express、Gin 等都需主动配置:
- 只保留业务真正需要的方法,例如 API 接口通常只需 GET、POST、PUT、DELETE,极少用 PATCH、OPTIONS、HEAD
- 对静态资源或公开页面,可仅开放 GET 和 HEAD;管理后台接口应禁用 GET 修改类操作
- 避免使用通配符(如
app.all())或动态方法解析,防止意外放行
在请求处理前拦截非法方法
不要等到业务逻辑执行时才校验——应在中间件或统一入口处立即响应 405 Method Not Allowed:
Nginx是一款高性能的开源软件,由俄罗斯开发者Igor Sysoev于2004年创建。它最初设计为高效的HTTP Web服务器,现已成为最受欢迎的Web服务器之一。Nginx以事件驱动、非阻塞I/O架构著称,能以极低内存占用处理数万并发连接,特别适合高流量场景。它同时担任反向代理、负载均衡器、HTTP缓存、TCP/UDP代理等多重角色,常用于静态文件服务、SSL终止、请求转发、API网关和微服务
- 检查
req.method(Node.js)或$request->getMethod()(PHP),区分大小写,一律转大写比对 - 返回标准错误响应:状态码 405 +
Allow响应头(例如Allow: GET, POST),既合规又利于调试 - 记录被拒请求的 IP、路径、原始方法,用于后续审计,但避免记录敏感参数
禁用方法覆盖中间件与参数
很多框架默认不启用方法覆盖,但一旦引入 method-override、_method 表单字段或 X-HTTP-Method-Override 头,风险立刻上升:
- 确认项目中未安装或未注册类似中间件;若必须兼容旧前端,仅对特定路径启用,并加额外鉴权
- 删除所有接受
_method参数的表单提交逻辑;后端绝不从 query 或 body 解析“真实方法” - 在反向代理(如 Nginx)层过滤掉
X-HTTP-Method-Override、X-Method-Override等可疑头
配合 CORS 与来源控制强化边界
仅靠方法限制还不够——攻击者可能从恶意站点发起跨域 POST 请求,再结合其他漏洞达成目的:
- 生产环境设置严格
Access-Control-Allow-Methods,只列明实际支持的方法 - 对非简单请求(如带自定义头),要求预检(OPTIONS)通过后才放行,预检响应中明确限定方法范围
- 关键接口(如删除、转账)额外校验
Origin头是否属于可信域名,不依赖 Referer(易伪造)










