2013-02-07 60 views
6

我们正在与一家通过RESTful API公开其服务的服务提供商合作。使用RESTful API - 安全吗?

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

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

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

回答

7

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

它有助于了解如何进行HTTP(或HTTPS)请求的过程。

  1. 确定协议(在这种情况下,HTTPS,使用端口443)使用DNS
  2. 建立TCP连接到服务器(如SSL参与,它更复杂一点)服务器的
  3. 获取IP地址
  4. 问题的新的连接到服务器的请求,这将是这个样子

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

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

+0

也许它可能以不受保护的形式出现在Web服务器日志中。 – mlt

+1

@mit - 是的,这可能是一个问题。服务提供商有责任确保这些请求不会被记录或在日志中进行适当审查。 – Ferruccio

5

但是,由于用户名和密码是URL的一部分,因此不能由第三方截取 ?

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

你很安全。

6

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

但是,API要求输入用户名和密码作为查询字符串参数的事实可能表明安全性有些松懈。

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

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