6

我有一个 iPhone 应用程序使用的 PHP 中的 HTTP REST API。

此 API 中的一些 Web 服务通过 HTTP 请求凭据中的用户身份验证进行保护,但我想通过提供完全加密的请求数据来避免“中间人”攻击。

我在安全问题上并不是很熟练,而且我在任何地方都找不到我的问题的明确答案:

HTTPS 与 STATELESS REST API 相关吗?

据我了解,HTTPS 做了两件事:

  • 加密你的会话
  • 向客户证明他正在与之交谈的服务器是安全的

所以乍一看,它没有响应我的需要,即加密我的服务器和应用程序之间的数据,因为 API 不使用会话。但我仍然有疑问。

有人可以对我说清楚吗?

我的另一个解决方案是使用公钥/私钥系统加密请求数据。会不会更合适?

谢谢 !

4

4 回答 4

4

是的。HTTPS 与应用程序无关,它是一种隧道协议。尽管 TLS 本身是一个有状态的协议,但通过它的 HTTP 部分却不是。

就像您使用 VPN 一样,您仍然可以拥有基于 REST 的应用程序。TLS 只是为每个连接自动设置和拆除隧道。

也就是说,利用 HTTP 和 HTTPS 的流水线方面来提高 TLS 连接的吞吐量是有价值的,但这是与应用程序本身无关的性能调整方面。

于 2012-04-24T18:00:38.963 回答
2

HTTPS 非常相关,是的,这是因为您提到的两点。您知道OAuth 2实际上强制执行 HTTPS 吗?

自己进行所有加密也是一种选择,但您会丢失 API 易于使用的部分。

大多数针对“简单”HTTP 请求的中间人攻击涉及窃取凭据和伪造请求,但它们也可以读取发送和接收的数据。如果您的问题是数据不可读,请使用 HTTPS。如果虚假请求是唯一的问题,那么OAuth 1 (而不是 2)之类的身份验证协议就足够了。

于 2012-04-24T17:41:29.973 回答
0

如果您不想实现 SSL,您可能需要查看http://www.jcryption.org/我不知道它是否可以在无状态环境中工作,但可能值得一试。它基本上是一个 jquery 插件,用于处理为正在传输的数据创建密钥对关联。可能仅用于表单提交。我们曾经在我的旧公司使用它来加密登录凭据。

于 2012-04-24T18:02:19.713 回答
0

如果数据敏感,绝对使用 HTTPS - 它在传输层进行加密,这正是您要寻找的。正如已经指出的那样,oAuth 2.0 本质上是强制要求的。您可以通过在 oAuth 1.0 中使用散列/签名来潜在地避免中间人,并避免必须使用 SSL,但那时正文仍然是明文的(您避免了明文发送 API 凭据,而不是正文)。

于 2012-04-25T06:30:18.040 回答