【问题标题】:How to protect JSON API from being accessed by anyone but my iOS client?如何保护 JSON API 不被我的 iOS 客户端以外的任何人访问?
【发布时间】:2014-10-26 05:46:06
【问题描述】:

我有一个使用 Rails 服务器 HTTP API 的 iPhone 应用程序。此时 API 是公开的 - 获取数据不需要授权。

目前任何人都可以访问 API 的 URL 并下载数据。

http://server.com/mydata

数据不是很敏感。但我还是要防止人们轻易得到它。有什么方法可以做到这一点?我也不希望 iOS 应用用户登录。

我目前的解决方案

iPhone 应用程序将秘密令牌添加到请求的 HTTP 标头或查询中。数据通过 HTTPS 传输。

https://server.com/mydata?secret=my_secret

有更好的方法吗?

【问题讨论】:

    标签: ios ruby-on-rails api


    【解决方案1】:

    Distribute and use your own SSL certificate.

    必须保护传输敏感客户数据(如信用卡和支付信息)的应用免受中间人攻击。 最好的保护是相互验证方案,其中交换证书以确保应用程序连接到受信任的服务器并确保服务器连接到受信任的应用程序。

    那么只有个人(可能已经安装了您的应用程序)才能访问。如果有人挖掘代码并获得公共证书,那么他们就可以冒充客户端;但到那时他们无论如何都会赢,应该探索两因素身份验证。

    【讨论】:

    • 有意思,谢谢你的信息。愚蠢的问题 - 自签名 SSL 证书是否提供了比我在 HTTPS 请求中传递秘密令牌的方法更好的安全性?在这里,我要防止的只是从服务器获取数据。如果连接被破坏并且iOS应用程序开始从其他服务器获取数据,我并不担心。
    • @Evgeny 只要设备没有有受损的 CA 链,那么 HTTPS(TLS1.1+,已修复漏洞)就可以被视为安全的加密通道。因此,通过该连接发送的共享秘密可以被视为秘密。除非CA trust is compromised,否则中间人攻击是不可行的。
    • @Evgeny 对于自签名证书,必须明确信任它;不用说,使用 untrusted 证书的 SSL 没有相同的保证。
    【解决方案2】:

    您可以尝试一种方法,即每个时间段只允许客户端进行 X 次请求(基于 IP 地址或用户名)

    HTTPS 非常容易在您控制的设备上居中。您可以进行 SSL 证书验证,但总有人有更多的时间,所以最好在服务器端处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 2016-09-21
      相关资源
      最近更新 更多