Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅适用于我的android客户端的网站API_Android_Security - Fatal编程技术网

仅适用于我的android客户端的网站API

仅适用于我的android客户端的网站API,android,security,Android,Security,我想为我的网站开发一个android应用程序。一种方法是为站点提供一个API,并让应用程序使用该API。然而,我希望这个API只被我的android应用程序使用,我不希望任何其他客户端使用这个API 有没有办法确保这一点 我可以想出一种方法:在应用程序中放入一个秘密,让应用程序始终将这个秘密传递给API。但我不确定这种方法有多安全,因为任何数据包嗅探器都可以很容易地嗅探参数,从而发现秘密。还有其他建议吗?简短的回答是没有,对不起。如果有人真的想利用你的网站/api/device/program/

我想为我的网站开发一个android应用程序。一种方法是为站点提供一个API,并让应用程序使用该API。然而,我希望这个API只被我的android应用程序使用,我不希望任何其他客户端使用这个API

有没有办法确保这一点


我可以想出一种方法:在应用程序中放入一个秘密,让应用程序始终将这个秘密传递给API。但我不确定这种方法有多安全,因为任何数据包嗅探器都可以很容易地嗅探参数,从而发现秘密。还有其他建议吗?

简短的回答是没有,对不起。如果有人真的想利用你的网站/api/device/program/在这里插入任何东西,他们有时间和资源,那么他们会的


要直接回答您的问题,将密钥放入应用程序并不安全,因为任何人都可以反编译应用程序并尝试从源文件重建密钥,他们不需要嗅探流量

我认为这与我几天前回答的一个问题类似。

也就是说,找到一种使用共享密钥对所有请求进行身份验证的方法


如果您在路径和参数上都使用了机密签名,那么应该不会有人伪造请求。

如果我错了,请纠正我!数据包嗅探器只能用于未加密的WiFi和(现在)罕见的网络配置(路由器或交换机阻止它们)

对于严重的问题,你应该考虑安全连接(HTTPS)。


也就是说,对于标准内容,我觉得密码短语足够安全。许多流行的web应用只使用http上的cookie来让您登录,这正是您的建议。

我一直在努力解决这个问题,实际上我最终实现了一个版本的来保护我的API。如果不启动浏览器来执行OAuth的“登录”部分,则可能会很困难。我将登录直接放入我的应用程序中,并在封面下实现了令牌交换。在这里发布代码涉及的内容太多,但效果很好。显然,HTTPS需要更高级别的安全性。

如果你可以从你自己的应用程序的包管理器那里获得某种签名,你可以使用模糊处理使它变得更加困难,并且让包管理器的签名/签名散列成为你的HMAC-SHA1的密钥

可能得试试这个()


如果你那样做,它会使它更难使用。显然,它仍然可以反编译,但是如果他们用调试等方法重新编译它,那么它的键就错了。然后,他们必须在根设备上创建自己的包管理器才能获得签名

终于从android开发者的博客上得到了答案。

我对此很感兴趣。我对Java知之甚少,但在它被混淆和编译之后,你真的能反编译并提取它吗?我很想看到一些带有示例的博客文章。@MatthewRudy反编译java类文件真的很容易。像proguard这样的模糊处理工具只是简单地重命名类和变量,使代码难以解释,但并非不可能。此外,字符串文字最终也是人类可读的,因此通常很容易在代码中查找可能是API键的内容。我发现了一个例子。看起来不太好。我知道我们所要做的就是给应用程序反向工程带来越来越多的摩擦。最好的方法可能是编译为本机代码(如@MatthewRudy给出的链接中所述)的繁琐方式。数据包嗅探器可以截获网络上的任何数据包,无论是否加密,wifi。加密只改变数据包中数据的存储方式。这里实际上引用了两种不同类型的加密。加密wifi意味着您和路由器之间的数据包是加密的。Https表示您与网站之间的数据是加密的。两者都是半安全的,并且都被证明是易碎的。最终没有完美的加密算法,唯一的问题是,任何人都可以得到你签名的哈希值。因此,除非您将其传递到某些代码中以进一步混淆它,否则它很容易被破坏。