REST API、HTTP谓词和ACCESS日志



在设计RESTful API时,我一直在努力遵循良好的做法。其中一个非常简单和常见的方法一直很难遵循:

  • 使用GET http谓词检索资源

为什么?假设你有一个URI来获得这样的帐户信息:

  • http://www.example.com/account/AXY_883772

其中,AXY_883772是银行系统中的帐户id。安全审计将发出警告,说明:

  1. 帐户ID将显示在HTTP访问日志上
  2. 帐户ID可能会缓存在浏览器的历史记录中(即使不太可能定期使用浏览器访问RESTful API)

最后,他们"建议"使用POST动词。

所以,我的问题是:

我们能做些什么?只需遵循安全建议并避免在大多数情况下使用GET?使用某种特殊的APACHE/IIIS/NGINX访问日志配置来避免记录对某些URL的访问?

如果你的url中有敏感信息,并且你正在记录url,那么你就是在记录敏感信息。

所以有两个明显的解决方案:

  • 不记录url
  • 使用不包含敏感信息的其他url

最后一个可以通过使用服务器映射回正常id的一些(不同的)id来实现。

如果这两种解决方案都不适合您,那么您就不能使用GET,因此这不是一个好的RESTful设计。

我意识到所有这些事情对你来说可能已经很明显了;但这是我能给出的最准确的答案。

毫无价值的是,这不仅适用于GET,实际上PUT、DELETE和POST也是如此。

相关内容

最新更新