WAF 防护73 条

HTTP 方法限制

仅放行业务需要的请求方法(GET/POST 等),可直接拦掉大量探测与危险方法调用。

安全设备配置速查安全更新于 2026-10-13

只放行业务需要的方法

HTTP 方法限制属于低成本高收益的加固:普通站点日常只需要 GET、POST,静态页面再加 HEAD,而 PUT、DELETE、TRACE、CONNECT 等方法正常业务根本用不到。默认拒绝未使用的方法,可以直接拦掉一批扫描与危险调用,也能避免 TRACE 交叉追踪这类老问题。

危险方法为什么该关

TRACE 会把请求原样回显,可被用来配合浏览器发起跨站追踪,读取带凭据的响应内容;PUT/DELETE 在服务器开启 WebDAV 或部分框架默认支持时能直接写文件、删资源,历史上多起 webshell 落地就是靠 PUT 完成。这些方法正常业务不会调用,默认拒绝等于直接抹掉一块攻击面,成本几乎为零。

基本信息

默认策略只放行 GET/POST/HEAD,其余返回 405
按需开放PUT/DELETE/PATCH(REST API)、OPTIONS(跨域预检)
实现位置WAF 规则、Nginx/Apache 配置均可
验证方式curl -X TRACE 等方法测试返回码

典型使用场景

  • 对外 Web 站点上线前的基线加固
  • REST API 按接口精确放行方法,而不是整站放开
  • 前后端分离项目:OPTIONS 预检必须放行
  • 审计要求证明应用只开放必要方法
  • 应急期间快速缩小可探测面

Nginx 实现示例

Nginx 实现示例
# http 块:用 map 定义方法白名单,避免在 location 里堆 if
map $request_method $method_allowed {
    default 0;
    GET     1;
    POST    1;
    HEAD    1;
}

# server/location 块:非白名单方法直接拒绝
if ($method_allowed = 0) {
    return 405;
}

# 前后端分离需要跨域时,为 OPTIONS 预检单独返回 CORS 头
if ($request_method = OPTIONS) {
    add_header Access-Control-Allow-Origin 'https://app.example.com' always;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS' always;
    return 204;
}

# 验证:curl -i -X TRACE https://example.com/   # 期望返回 405

方法与限制建议

方法常见用途限制建议
GET/HEAD页面与接口读取放行
POST表单与接口提交放行
OPTIONS跨域预检按需放行并返回必要 CORS 头
PUT/PATCH/DELETEREST 资源修改与删除按接口精确放行
TRACE/CONNECT无正常业务用途默认拒绝
方法限制建议默认启用;REST 风格接口要按业务精确放行,一刀切全拒会直接打断正常调用。
拦掉 OPTIONS 会让跨域预检失败,前端表现为接口无响应、控制台报 CORS 错误;遇到这类报错先确认是不是方法限制拦到了预检请求。

易错点

  • 整站禁止 OPTIONS,前后端分离项目的前端请求全部失败
  • REST API 只放行 GET/POST,PUT、DELETE 接口调用直接 405
  • 只在 Nginx 侧限制而忽略源站容器或中间件的支持方法差异,仍留缺口
  • 在 location 内用 if 堆复杂判断导致规则未按预期命中(改用 map 更可靠)
  • 限制方法后未做回归测试,前端依赖非白名单方法的逻辑出错
  • 只在前端做限制,攻击者绕过前端直接请求接口时限制形同虚设

数据来源与参考

  • RFC 9110(HTTP 语义)
  • OWASP 安全配置备忘
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌