gb.*_*gb. 6 api rest api-design
我正在设计一个(as-RESTful-as-possible)API,并想知道如何最好地解决以下问题:
GET /objects/{id}{id}s存储在我们的Web服务器日志中,因此我们希望避免使用查询字符串或URI参数; 这让我们在请求体中留下了params.(假设数据是id敏感的,我们无权访问另一个非敏感的id)我们如何(应该)设计API GET端点以避免使用可能被记录的查询或URI参数?
在这种情况下使用POST还是有其他创造性方法可以接受吗?
(注意:此API不会向第三方公开)
我认为有很多服务都面临着想要保护敏感标识符的问题。然而,即使这个问题已经有几年了,我也没有找到合适的解决方案。
正如已经提到的,所提供的简单地改变网络服务器日志记录的解决方案并不完美,但也忽略了这样一个事实:每个客户端在使用 API 时都应该执行相同的操作(其中可能是 JavaScript 客户端,通过代理在浏览器中)。 ..祝你好运)
我所知道的解决方案是:
对参数进行加密;但这会使您的 API 更加复杂,并且需要加密密钥。
使用伪 ID,如 @jj-geawax 所提到的;然而,这可能比加密 (1) 更复杂,因为您必须为每个敏感参数实例交换伪 ID:
POST body中的参数,同时请求数据;这不是休息
解决方案 3 似乎是迄今为止最简单/最容易实现的方法,尽管它违反了 REST 设计规则。但我有兴趣听到替代方法或其他见解。
更新:OWASP 对于请求中的敏感参数说了以下内容
HTTP请求中的敏感信息
RESTful Web 服务应小心防止凭据泄露。密码、安全令牌和 API 密钥不应出现在 URL 中,因为这可以在 Web 服务器日志中捕获,这使得它们具有内在价值。
- 在 POST/PUT 请求中,敏感数据应在请求正文或请求标头中传输。
- 在 GET 请求中,敏感数据应在 HTTP 标头中传输。
这可能比使用 (POST) 主体有点困难,但在了解如何实现 REST 时也很好。
| 归档时间: |
|
| 查看次数: |
551 次 |
| 最近记录: |