HTTP 方法与幂等性入门

理解 GET、POST、PUT、PATCH、DELETE 的语义差异,为什么幂等性和安全方法对 Web 安全设计很重要。

写在前面:合法学习边界

本文用于理解 HTTP 方法语义和 API 安全设计。请不要把危险操作测试用于真实系统。

一、为什么方法语义重要

HTTP 方法不只是“发送数据”的标签,它定义了请求的意图。

常见方法:

1
2
3
4
5
GET:读取资源
POST:创建资源或提交动作
PUT:整体替换资源
PATCH:局部更新资源
DELETE:删除资源

二、安全方法和幂等性

1. 安全方法

GET 和 HEAD 通常应是安全的:

1
不应改变服务器状态

如果 GET 可以改密码、删订单、发转账,那就是设计错误。

2. 幂等性

同一个请求重复执行,结果应当一致。

常见幂等方法:

1
2
3
GET
PUT
DELETE

POST 通常不是幂等的,因为重复提交可能重复创建对象。

三、为什么安全人员关心

很多漏洞会利用“不该有状态变化的请求”去改变状态。

例如:

1
2
3
用 GET 改状态
重复 POST 重复创建
PUT 覆盖他人资源

这会影响:

1
2
3
业务正确性
审计追踪
风险等级

四、防御建议

1
2
3
4
危险操作使用安全的方法映射
重复请求要幂等或去重
接口要有权限校验
记录变更请求日志

五、报告中的正确写法

示例:

1
2
3
发现:GET /api/cancel/{id} 会直接取消订单,违反 GET 的安全语义。
风险:可能导致误操作、缓存污染、日志误判和自动化滥用。
建议:改为 POST 或专用方法;增加幂等键;记录审计日志。

六、小结

方法语义不是装饰,而是协议约束。理解它,才能看懂 API 安全和日志分析。

本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处