限制 ajax API 对 iOS / Android 应用程序的使用
Posted
技术标签:
【中文标题】限制 ajax API 对 iOS / Android 应用程序的使用【英文标题】:Restrict ajax API use to iOS / Android application 【发布时间】:2014-07-24 02:34:34 【问题描述】:考虑到您从 API (mysite.com/api/OooOOooData) 提供有价值的数据的情况,如何将其访问限制为它所针对的 ios / android 应用程序?通过应用程序将数据与适当的广告相关联至关重要。如果除此之外还可以使用 API,则数据将免费提供而没有广告奖励,或者其他开发人员可能会使用它并实际上窃取利润。
如果这是一个仅限网络的应用程序,那么将使用限制在我自己的网站上是没有问题的。因为这在处理网络时是可能的并且很重要,所以我倾向于认为有一些东西可以用其他技术来处理这个问题。我的项目是在 Cordova 中使用 Web 技术。没有用户系统,因此无法选择身份验证。
我知道我可以实施的唯一措施是在我的代码中任意包含一个密钥并将其与所有 ajax 请求一起发送,然后让服务器需要该密钥。由于代码位于私人仓库中,因此只有拥有越狱手机的用户才能看到该代码。这显然是一个薄弱的解决方案,而且风险太大。
是否有标准且安全的方法?
【问题讨论】:
公共受限 API 通常会为应用程序的开发人员提供一个私钥以包含在请求中。 我认为没有 100% 安全的方法。总有办法让某人对客户端应用程序进行逆向工程和/或欺骗他们的请求。也许您可以结合 1) 使逆向工程变得困难和 2) 监控请求以检测滥用行为。但正确的解决方案可能是重新考虑您的奖励制度。 【参考方案1】:你可以使用如下的php代码:
<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
if(strpos($agent,'IPhone') !== FALSE)
// The client is an IPhone
else
// The client is not an IPhone
?>
不,没有一种安全的方法可以做到这一点。 (据我所知)
【讨论】:
这并不能保证客户端是预期的应用程序。另外,用户代理很容易被欺骗。 对,这可能只是一个 iPhone 应用程序,它是我们的仿制品,或者其他任何东西,如果他们伪造了标题。【参考方案2】:据我所知,总体而言,没有 100% 安全的方法可以做到这一点,大多数授权/身份验证机制都是基于信任的。话虽如此,我有几个建议
在服务器上有一个私钥/公钥类型的验证。将公钥存储在设备上,将私钥存储在服务器上,然后通过将密钥作为 POST 请求的一部分发送来验证请求。这显然假设证书不会被盗或共享。
李>您可以为每个注册使用您的服务的用户生成客户端 ID 和客户端密码,并将其用作身份验证的一部分。这再次假设正在注册数据的开发人员不与其他人分享他的身份。
【讨论】:
一般来说很好的建议,但他们不保证客户是预期的应用程序。由于 OP 使用的是 Cordova,因此可以轻松对其进行逆向工程。以上是关于限制 ajax API 对 iOS / Android 应用程序的使用的主要内容,如果未能解决你的问题,请参考以下文章
如何限制 AJAX API 不被不必要的使用(例如某人执行 SELECT *)
为啥同源策略限制对 Ajax 的访问,而不限制对 Php 的访问?