Javascript 阻止访问包装应用程序之外的web应用程序

Javascript 阻止访问包装应用程序之外的web应用程序,javascript,android,ios,spring,jakarta-ee,Javascript,Android,Ios,Spring,Jakarta Ee,我正在为Android和iOS设备创建一个web应用程序,并将其包装在web视图中。web视图将是非常简单的代码,基本上指向我的web应用程序。例如:www.myapp.com 我希望用户只能在appstore中购买应用程序后才能访问web应用程序(使用它)。如何防止用户对源代码进行反编译并直接访问URL?您可以从Web服务下载包装好的URL(使用https),这样URL就不会在应用程序中进行反编译 无论如何,一个web请求可能会被嗅探器监视,并且可能仍然会被检索。如果用户真的想获取URL并直接

我正在为Android和iOS设备创建一个web应用程序,并将其包装在web视图中。web视图将是非常简单的代码,基本上指向我的web应用程序。例如:www.myapp.com


我希望用户只能在appstore中购买应用程序后才能访问web应用程序(使用它)。如何防止用户对源代码进行反编译并直接访问URL?

您可以从Web服务下载包装好的URL(使用https),这样URL就不会在应用程序中进行反编译


无论如何,一个web请求可能会被嗅探器监视,并且可能仍然会被检索。

如果用户真的想获取URL并直接访问它,然后将其放在在线论坛上,这是无法阻止的

有一种方法可以防止这种特殊情况,但它仍然不能完全保护应用程序。我们的想法是在应用程序中附带一个二进制密钥,get用于对从您的站点发送的每个请求进行签名,有关详细信息,请参阅

通过这种方式,您可以确保请求来自具有API密钥的人,很可能是您的应用程序。这将防止URL发布在论坛上,应用程序直接通过web浏览器访问的情况

此机制通常用于保护JSON API,但也可用于保护web视图应用程序对网页的访问

但这并不妨碍有人检查二进制文件以获取API密钥,并生成另一个应用程序或程序,用它签署请求,从而创建应用程序的克隆

例如,像twitter这样的应用程序,其密钥在中公开

因此,这是一种安全性与便利性的权衡:如果您想覆盖浏览器访问的URL,请使用API密钥,定期扫描android应用商店中的克隆应用程序,并报告它们将被关闭。这应该是罕见的,很容易发现,而且用户会报告给你


如果你想获得更高的安全性,那么就免费安装该应用程序,自己管理登录/付款:这要复杂得多,而且会阻止用户减少销售额。使用API密钥似乎是最好的安全性/便利性权衡。

这个问题让我想起了一个类似的问题。被接受的答案有很多你可以尝试的东西

对于我自己的答案,以下是我链接的

您可以使用GoogleAuthUtil类,该类可通过Google Play获得 服务,以检索称为“ID令牌”的字符串。你发邮件 令牌到您的后端,您的后端可以使用它快速 便宜地验证是哪个应用程序发送的以及谁在使用该应用程序


一般来说,这种方法是添加一些代码,以检查到您的URL的请求是否由“已验证/付费”用户生成(在Android博客示例中是通过检查他们的Google Play Services帐户)

您可以尝试以下方法:

  • 使用收缩器、优化器、模糊器和前置验证器类,如PROGUARD
  • 将网站url分成多个部分,并将其放入strings.xml中
  • 编写加密,如AESDES以加密strings.xml中的url字符串
  • 在运行时,您可以解密、合并url字符串并将其设置为变量。当您使用它时,您可以将该变量设置为null,这样人们就无法在内存中获取它

  • 我认为这会隐藏您的字符串,人们无法轻松找到它,

    客户端验证将毫无用处,因为如果有人知道URL,就可以访问它。而且,无论您使用多少代码混淆,它都不会被决定性的黑客隐藏。此外,如果请求是通过代理路由的,甚至没有必要进行黑客攻击,日志将显示URL

    您应该进行服务器端验证,并使用一个简单的脚本来查看这些请求来自何处

    每个HTTP请求都提供一些有关客户端的信息。您可以查看该信息以确定请求的确切来源。为了增加一点安全性,您可以从客户端在HTTP头中修改和设置自己的值

    Android和IOS的实现将不同,因为挑战也不同

    Android

    在Android上,将一个应用程序发布到市场上相对容易,如果有人知道你的url,他们可以对HTTP请求执行相同的操作,然后发布另一个应用程序。为防止发生这种情况:-

    每个android应用程序都有一个证书签名,您可以通过HTTP头发送签名值,并在服务器端验证。有关如何从android应用程序获取签名的信息,请参阅

    请记住,应用程序签名是唯一的,这就是谷歌如何在应用程序中使用商店标识,所以他们不可能让其他开发人员掌握这一点。如果它不能满足您的要求,请添加额外的头值(一些秘密),并在每次更新时更改它

    Android或Apache的其他HTTP API也提供了支持

    iOS

    有关如何在iOS上修改http头的信息,请参阅


    在这种情况下,仍然存在的一个问题是,任何人都可以创建iOS应用程序并执行相同的操作,但在iOS上,人们不能简单地执行此操作,因为每个应用程序都要经过漫长的苹果验证过程。您甚至可以在每次新的应用程序更新或http请求中使用旋转密码或动态生成密码,只有您的服务器才能验证这些密码,从而使事情变得更加困难。

    我认为您应该使用OAuth 2来限制对web服务器的访问


    这个问题可能有帮助:

    如果我遗漏了一些非常明显的东西,很抱歉,但是用户如何在不首先购买应用程序的情况下让代码进行反编译?你是否在问如果一个用户购买、反编译并共享URL,该怎么办?一句警告的话可能会重复——苹果有拒绝只将网站包装成文件的应用程序的历史