我有一个 REST API,我想通过 POST 处理所有 HTTP 请求。
仅使用 POST 执行用户请求的所有 CRUD 操作是否存在任何安全问题,该操作会发送 JSON 指定要执行的操作(和其他信息)?
我有一个 REST API,我想通过 POST 处理所有 HTTP 请求。
仅使用 POST 执行用户请求的所有 CRUD 操作是否存在任何安全问题,该操作会发送 JSON 指定要执行的操作(和其他信息)?
的GET(以及HEAD,OPTIONS和TRACE)被定义为一个安全的方法(RFC 7231,4.2.1)。按照这个定义,你不应该使用GET来代替PUT,DELETE等等。
该 PUT和DELETE是幂等的方法(RFC 7231,4.2.2):
如果使用该方法的多个相同请求对服务器的预期效果与单个此类请求的效果相同,则该请求方法被认为是“幂等的”。在本规范定义的请求方法中,PUT、DELETE 和安全请求方法是幂等的。
该POST方法没有这些限制,但请记住,Representation State Transfer REST 是一种软件架构风格。来自 W3C 工作组注释 11 February 2004, 3.1.3,重点是我的:
Roy Fielding 提出了一种更受限制的可靠 Web 应用程序的架构风格,称为表示状态转移(REST),并启发了 W3C 技术架构组的架构文档 [Web Arch] 以及许多将其视为如何将其视为模型的人。构建 Web 服务 [Fielding]。REST Web 是 WWW(基于 HTTP)的子集,其中代理提供 统一的接口语义——本质上是创建、检索、更新和删除——而不是任意或特定于应用程序的接口,并且仅通过交换申述。此外,从某种意义上说,REST 交互是“无状态的”,即消息的含义不依赖于对话的状态。
因此,尽管使用POST代替PUT并且DELETE没有直接的安全隐患,但您的 API 将不再是 RESTful,而是任意的应用程序特定接口。