【问题标题】:Securing a RESTful API with SSL? [closed]使用 SSL 保护 RESTful API? [关闭]
【发布时间】:2015-05-04 16:43:22
【问题描述】:

我正在寻找一种方法,让我的 iOS 应用与我在 Ruby on Rails 中构建的 RESTful API 进行安全通信。

如果我遵循 Heroku 的“SSL Endpoint”文档,并允许通过 HTTPS 访问我的 Rails 应用程序,如果我从我的 iOS 应用程序(通过NSMutableURLRequest())进行 HTTPS 调用,它会受到保护吗?还是人们仍然能够破译这些参数?

如果这不是一个好的选择,有什么建议?

【问题讨论】:

  • 安全防护到底是什么?对专用网络上的最终用户安全吗?对于他们在公共网络上?对抗有权访问您应用的黑客?
  • @Wain 类似于保护密码和电子邮件不被网络嗅探到登录。

标签: ios ruby-on-rails ruby ssl heroku


【解决方案1】:

是的,使用 SSL 将保护所有传入/传出 API 的数据,以防有人嗅探或捕获您的网络流量。

只需确保您的请求将发送到 https。如果您的服务器未正确配置,则启用 SSL 后,客户端仍然可以在没有 SSL 安全性的情况下发布到 http。因此,我建议确保您的应用程序设置为使用 https 网址。

【讨论】:

    【解决方案2】:

    为了保护专用网络上的最终用户,您可以将 MITM 攻击排除在范围之外,只使用 HTTPS。

    对于公共网络上的用户来说,MITM 是现实存在的,您需要检查来自服务器的证书,以确保它确实是来自您服务器的证书。您应该检查域名和证书(或证书的哈希)。

    针对可以访问您的应用程序(任何人都可以从商店下载)的黑客来说,这是非常昂贵的,并且涉及大量的校验和检查点,即使这样对攻击者来说也很难,并非不可能。

    【讨论】:

    • 如果我只是向我的服务器发出请求而不接受任何请求,是否有必要检查证书?因为我将 URL 硬编码到应用程序中,所以它不应该去其他任何地方对吗?
    • 这并不能阻止某人拦截请求、窃取详细信息然后转发请求。为了防止应用程序必须验证服务器证书的身份,并且如果它无效则不发出请求。
    • 加密后如何修改?
    • 查看与 SSL pinning 相关的 AFNetworking 代码(URL 连接委托方法或 URL 会话身份验证处理)
    • @Zaph 这通常是固定到证书时的一个问题,因为应用程序需要某种方式来验证它,因此您通常需要计划证书更改并发布特定版本,通常与强制同时进行更新用户和/或根证书的后备验证 - 这是一项复杂的业务......
    【解决方案3】:

    使用 ssl,并检查服务器提供的证书将防止 MITM 攻击。这并不意味着您正在阻止用户伪造对您的 API 的请求。

    这意味着您可以简单地对您的客户端应用程序进行逆向工程,并构建一个克隆应用程序,向您的服务器发出有效请求。 如果您正在运行一个小型服务,这与发生的情况非常不同,但它可能会发生,因此请始终在服务器端验证您的输入并将它们视为不受信任,因为您无法说出它们来自哪里。

    【讨论】:

    • 我只担心发送到服务器的请求,因为来自服务器的数据不是很敏感。
    • 您有什么顾虑?用户需要注册吗?这是一个高调的项目吗?为什么数据直接来自您的应用程序很重要?
    【解决方案4】:

    通过对您的代码进行逆向工程,其他人将始终能够破译这些参数。你可以让它变得更难,但并非不可能。 HTTPS 仅保护网络连接,而不是您的代码。从加密的网络流量中无法发现参数名称或值。

    【讨论】:

    • by reverse engineering 你是说以某种方式阅读我的编译代码吗?
    • 除非攻击者执行 MITM 攻击
    • 是的,正在阅读您编译的代码。编译后的代码可以反汇编并作为汇编语言读取。
    • 如果远程主机的 SSL/TLS 证书经过验证,MITM attach 应该是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2012-12-15
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多