通过 HTTPS 发送时,rest api 查询参数是不是安全?

Posted

技术标签:

【中文标题】通过 HTTPS 发送时,rest api 查询参数是不是安全?【英文标题】:Are rest api query parameters secure when sending via HTTPS?通过 HTTPS 发送时,rest api 查询参数是否安全? 【发布时间】:2021-03-14 05:01:58 【问题描述】:

我暴露了下面的rest api方法

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/GetStuff?userName=userName&password=password&howMany=howMany", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Things[] GetStuff(string userName, string password, int howMany);

通过 https 将用户名和密码作为查询字符串的一部分发送是安全的,还是有更好的身份验证方式?

【问题讨论】:

网址存储在网络服务器日志、浏览器历史记录等中。如果您认为这是安全的,那么您就有了答案……总有更好的方法 【参考方案1】:

不,他们不是。正如评论中提到的,如果有人窃取了您的日志,他们可以访问所有查询参数。 (在您的情况下,敏感信息)。

查询参数(正确地)用于无幂请求(如GET)以过滤您的结果集。

另一方面,标头值是安全的。这就是我们通常发送身份验证/授权标头而不是查询参数的原因。

查看authorization header 以获取此示例。

HTTP Authorization 请求标头包含向服务器验证用户代理的凭据,通常但不一定在服务器响应 401 Unauthorized 状态和 WWW-Authenticate 标头之后。

【讨论】:

以上是关于通过 HTTPS 发送时,rest api 查询参数是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

通过 BigCommerce RESTful API 从商店中提取类别

springboot的服务端Restful风格 API接口,在不同场景下,设置不同的请求及传参方式的设计,及其他异常场景解决方案

使用 Paypal REST api 发送发票时,客户收不到电子邮件

使用 REST api 发送通知

使用嵌套查询 REST API 获取请求

Django - 通过 websocket 在事件上重复发送 API 调用结果(REST 框架 + 通道)