限制通过 URL 发送参数的标准 API 安全做法是什么?

What is the standard API Security practices for Restrict parameter sending through URL?

提问人:Robin Cybersec 提问时间:7/3/2023 最后编辑:Brian Tompsett - 汤莱恩Robin Cybersec 更新时间:7/3/2023 访问量:36

问:

从安全角度来看,很少有人说不允许在 API 中使用 GET 方法通过以下格式的 URL 发送查询参数。

GET my-server/api/payment/checkDue?clientCode=123&monthYear=01022023

他们还建议在 API 中使用 POST 方法而不是 GET 方法,如下所示。

POST `my-server/service/function { clientCode: 123, monthYear: 01022023}`

谁能向我建议这种情况下的最佳实践和安全漏洞?

休息 安全 获取

评论


答:

0赞 Leonid 7/3/2023 #1

从安全角度来看,通常认为使用该方法而不是通过 URL 发送查询参数的方法是一种很好的做法。POSTGET

最佳实践:

  1. 用于敏感数据:请求通常用于在服务器上修改或创建数据的操作。POSTPOST

  2. 避免在 URL 中公开敏感数据:URL 中的查询参数通常记录在不同的位置,例如 Web 服务器日志、代理或浏览器历史记录。如果通过请求中的查询参数传递敏感数据,则这些数据很容易被看到,并可能暴露给未经授权的各方。GET

  3. 防止缓存和书签:带有查询参数的请求通常由 Web 浏览器缓存,用户可以将其添加为书签。如果共享或缓存 URL,这可能会导致敏感数据意外泄露或潜在的安全漏洞。GET

安全漏洞:

  1. 缺乏加密:除非实施了适当的加密机制(如 HTTPS),否则在传输过程中可能会拦截 和 请求。如果不加密,攻击者可能会窃听请求并获取敏感数据。GETPOST

  2. 输入验证不充分:无论您是否使用 或 ,在服务器端验证和清理输入参数都至关重要。否则可能会导致安全漏洞,例如注入或跨站点脚本 () 攻击。GETPOSTSQLXSS

  3. 缺乏身份验证和授权:仅从 POST 切换到 POST 并不能解决身份验证和授权问题。GET

  4. 有限的缓存控制:虽然使用请求有助于防止客户端缓存,但服务器端缓存或中间代理缓存仍可能发生。必须实现缓存控制标头或机制,以确保敏感数据不会被不当缓存或存储。POST

总体而言,使用而不是发送查询参数可以增强安全性。POSTGET

有关此主题的其他链接:

  1. https://www.mnot.net/cache_docs/
  2. https://www.keycdn.com/support/put-vs-post
  3. https://cheatsheetseries.owasp.org/cheatsheets/REST_Security_Cheat_Sheet.html