6

我们正在与通过 RESTful API 公开其服务的服务提供商合作。

我们可以通过将用户名和密码作为 URL 参数传递来使用 API 进行身份验证。

例子:https://example.com/api/service.json?api_user=Username&api_key=Password

我知道这是使用 SSL。但是,由于用户名和密码是URL的一部分,这不能被第三方拦截吗?

4

3 回答 3

7

不可以,第三方只能看到目的地 (example.com)。URL 的其余部分实际上嵌入在请求中。

它有助于理解如何发出 HTTP(或 HTTPS)请求的过程。

  1. 确定协议(在本例中为 HTTPS,使用端口 443)
  2. 使用 DNS 获取服务器的 IP 地址
  3. 建立与服务器的 TCP 连接(如果涉及 SSL,则有点复杂)
  4. 在新连接上向服务器发出请求,看起来像

    GET /api/service.json?api_user=Username&api_key=Password

由于实际请求是加密数据流的一部分,因此监视连接的人无法提取敏感信息。

于 2013-02-07T18:40:30.590 回答
6

以前的答案在技术上都是正确的;如果您使用 HTTPS,则 URL 和查询字符串数据将在传输之前被加密,并且可以被认为是安全的。

然而,API 要求用户名和密码作为查询字符串参数这一事实可能表明安全性方法有些松懈。

例如,许多网络服务器将默认记录请求查询字符串参数,这意味着您的纯文本凭据可能位于磁盘上的某个地方(并且许多公司将以不安全的方式存储或备份网络服务器日志)。

简而言之:将凭据作为查询字符串参数传递本身并不是安全风险,但通常是一种不好的做法,并且可能是更大安全问题的症状。

于 2013-02-07T22:02:09.707 回答
5

但是,由于用户名和密码是URL的一部分,这不能被第三方拦截吗?

URL 也是在加密的情况下发送的。换句话说,保护通道的过程发生URL 发送到服务器之前。

你安全了。

于 2013-02-07T19:11:24.103 回答