我的密码在apk中是否安全?

时间:2014-07-02 07:13:57

标签: android database

假设我想从我的Android应用程序访问在线数据库。我必须输入我的用户名和密码。但如果我这样做,我的证书是否安全? 例如,黑客可以反编译我的apk并获取密码吗? 如果它不安全,我该怎么办,发送请求到私人服务器上的php脚本?

6 个答案:

答案 0 :(得分:2)

2件事:

- 不要直接从Android应用程序连接到数据库。这被认为是不好的做法,并且有充分的理由,如果有人反转你的apk,你可能会暴露查询和其他信息/代码,但还有其他原因......

相反,使用REST服务: 从客户端,您只会将http请求发送到特定的服务器文件/ servlet,这些文件将从数据库或其他来源检索您需要的信息(通常使用JSON)。您也可以使用POST表单进行身份验证。

- 您的凭证对于逆向工程是安全的(主要是因为它们不是硬编码的......)但可能会通过网络钓鱼通过热点撤回到您的连接中。

因此,在将这些凭据发送到服务器之前使用encription会更好。您应该很容易找到对md5或SHA的默认支持。

但是,您应该查看Oauth协议实现以及用户身份验证,以获得具有大量互操作性的大型项目的可靠性,这可能会对用户凭据造成风险,除非您的软件使用经验证的排序令牌。

答案 1 :(得分:1)

1)它不“不安全”,危险 2)即使像我这样的傻人也可以反编译apk,更不用说真正的黑客了 3)一种可能的解决方案是实现用户认证。实际上,这取决于你想要做什么

答案 2 :(得分:0)

不,它们在APK中是不安全的 - 它可以轻而易举地反编译一个。通过HTTPS Web服务发送它更安全。但实际上,您不想直接从您的应用程序访问数据库 - 存在安全风险,您需要允许您的数据库成为开放式互联网端口。相反,您应该使用Web服务向您的应用提供数据。这样只有Web服务器可以直接访问数据库,防火墙可以保持互联网的其余部分。

答案 3 :(得分:0)

执行基本身份验证 -

httpclient-4-basic-authentication中所述,

  

一般情况下,我们建议尽量减少询问用户的频率   凭据 - 使网络钓鱼攻击更加显着,更少   可能会成功。而是使用授权令牌和   刷新它。

     

如果可能,用户名和密码不应存储在   设备。而是使用用户名和执行初始身份验证   用户提供的密码,然后使用短命的,   特定于服务的授权令牌。

HttpHost targetHost = new HttpHost("localhost", 8080, "http");
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, 
new UsernamePasswordCredentials(DEFAULT_USER, DEFAULT_PASS));

AuthCache authCache = new BasicAuthCache();
authCache.put(targetHost, new BasicScheme());

// Add AuthCache to the execution context
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
context.setAuthCache(authCache);

为了最好,在存储凭据时使用AccountManager

如官方开发文档中所述 -

  

此类提供对用户的集中注册表的访问   在线帐户。用户输入凭据(用户名和密码)   每个帐户一次,授予应用程序访问在线资源的权限   用"一键式"批准。

更多阅读security-tips

答案 4 :(得分:0)

如果您要将应用程序中的凭据保存为硬编码以进行验证,则可能始终有害。但是如果您使用JSON或其他一些Web服务并将您的凭据发送到服务器。然后,他们比在应用程序本身保存它们更加世俗化。让验证在服务器上的PHP脚本上执行,而不是在应用程序端执行。

答案 5 :(得分:0)

如果您的应用程序可以在没有用户提供凭据的情况下执行某人,那么有权访问apk文件的人可以执行此操作。因此,如果您的应用与某些数据库,存储或某人通信,则任何人都可以访问它们。

你可以尝试一些技术来隐藏apk中的密码,但它只会让它变得更难一点。

这意味着,您有四种可能性:

  1. 根本不要连接到外部数据库。

  2. 使用一些中间服务器。这意味着任何人都可以通过此服务器使用您的数据库,但服务器至少可以限制对此数据库的访问。

  3. 不要存储任何凭据,而是要求用户提供凭据。

  4. 在apk中存储凭据,让每个人都使用您的数据库。