ios - 在 HTTP 请求中保护 API key

标签 ios security ssl translate api-key

在搜索 SSL 和 HTTPS 一天之后,我完全不知道如何做一些非常简单的事情。我有一个没有用户身份验证的小应用程序。所有用户都会看到一个简单的应用。

我正尝试为此使用 Google 翻译 API。我有一个翻译 API key ,但我完全不知道如何保护它。我想直接从我的 iOS 应用调用 Google 翻译,根据 api 文档 ( https://cloud.google.com/translate/docs/reference/rest ),apiKey 作为请求参数“key”提供。 API 文档还说 Google 翻译支持 SSL,但显然我没有对我的 ios 应用程序进行任何类型的 SSL 检查来确认身份。我的问题是,如何阻止可以获取我的翻译 API key 并滥用它的 MITM 攻击?我尝试使用 Charles,我清楚地看到正在传递的 key 。

我在 Internet 上阅读的所有资源都说他们使用 SSL,一切都很好。但是没有关于如何在使用 Google 等流行服务的 iOS 应用程序中使用 SSL 的示例。

关于如何发出这个简单的 GET 请求并防止我的 key 被盗有什么想法吗?

编辑:

SSL Pinning 在这方面有点矫枉过正。我没有考虑使用 SSL,但我不知道它如何与 iOS 和像 Google 这样的实体一起工作(根据下面与 @pvg 的讨论)。

最佳答案

您正在尝试使用 HTTPS,因为您不希望人们知道您的 API key 。如果您的应用程序直接连接到谷歌翻译,您是否考虑过 API key 的存储位置? :)

您必须将您的 API key 与您的应用程序一起分发给 Google 翻译。几乎每个人都会这样。这可能是问题,也可能不是问题,我认为 Google API key 通常以 Javascript 的形式发送到浏览器客户端,因此它们并不是什么大 secret 。保护它免受用户侵害的唯一方法是运行您自己的服务器,使用存储在您服务器上的 API key 将您的应用查询转换为 Google 翻译查询。

(也许这是显而易见的,但请注意 HTTPS 是一种传输协议(protocol),它保护动态数据,即当它通过网络发送时,但不保护静止数据,即当它在您的移动应用程序中时电话。)

至于如何确保没有人冒充谷歌的服务器,以及是否需要证书固定。证书是您的保证,在大多数情况下,这是不可能的。几乎任何您选择与 https 网络服务器通信的标准方法,您的底层框架和/或操作系统都会验证服务器证书并确保没有模拟。这就是证书的用途。证书固定用于减轻客户端上安装的恶意受信任根证书之类的威胁。例如在公司网络中,通常情况下公司 CA 根证书作为受信任的根安装在托管客户端上,从那时起,公司代理也可以通过伪造服务器 key 和证书来窥探客户端 SSL 流量。这是唯一可能的,因为公司根证书是预装的,攻击者是不可能的。类似的威胁是当攻击者设法将他的证书作为受信任的根安装在客户端上时,但这种情况不再很常见了。根据您的威胁模型,您可能需要针对它的保护,但在大多数情况下,使用标准 Web 客户端与 https API 对话足以验证服务器,您可以确定当您从 https://google.com 下载内容时,实际上来自 google.com。

关于ios - 在 HTTP 请求中保护 API key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40698130/

相关文章:

python - 如何解决AttributeError : SMTP_SSL instance has no attribute '__exit__' in Python?

ios - 如何知道 dispatch_async 正在运行 ios

wcf - 在 WCF 服务上实现 X509 安全性时, SOAP 体未加密

asp.net-core - MailKit.Security.SslHandshakeException : The host name did not match the name given in the server's SSL certificate. asp.net 核心 5,nginx

r - 是否可以将 R 脚本编译为二进制文件?

java - 如何使用 Java 构建简单的安全 Web 服务?

apache - 我如何知道是否为通配符设置了 SSL 证书

ios - 使用 WebKit View 显示 URL - 当我点击新标签并再次返回时,我需要它恢复\刷新

ios - 如何消除 UITableView 左侧的边距,而不在右侧创建间隙?

ios - 使用 Apple 登录。获取用户电话号码