2012-04-15 57 views
0

我到处搜索过,发现很多我无法理解的信息。我正在使用WAMP服务器并设法执行“SELECT name FROM Tablename”查询并将数据传递给json_encode()。到目前为止,我喜欢结果,但现在我需要保护服务器中的JSON文件,使其仅可供运行我的Android应用的用户访问。如何使用REST API或其他方法来保护JSON文件?

通过我的研究,我发现REST可能对我来说是一个解决方案,但我不明白我如何才能为我的情况实现它。是否有可能具有服务器端REST安全性和客户端?我知道REST是一个Web服务,我阅读了一个教程,其中的Web服务基本上是一个网页。我的优先级是服务器端json文件,安全性和速度。用户不会通过Android应用程序插入任何信息。我正在考虑将具有用户名和密码的Android应用程序部署到特定的json文件(验证)。

My Application Flow

这将是有益的,如果你可以点我的视频教程,或者初学者教程,涉及到的问题。

这是我的具体问题?

  • 我可以用JSON解析图像吗?
  • 它是更有效的mysqldump - >转换.csv文件---> SQLite的? (安全地)。
  • .CSV文件在数据库中有多大的一百万个条目可以得到多大?
  • 我该如何实现这一切?

请帮忙,谢谢。

+0

您应该为每个帖子提出一个问题。拿你的其他“具体问题”部分,并在研究后在其他帖子中具体询问他们。 – 2012-04-16 01:08:23

回答

0

解决方案:使用HTTP头

不安全溶液:

使用用户代理报头。

User-Agent: MyAndroidApp/1.0 

更安全的解决方案:

首先,你需要使用SSL,所以没有人可以只是很容易地看到你的密钥。

其次,你可以把一个密钥在请求的HTTP头,然后从Android应用程序使:

X-Android-Secret-Key: fee400be-7d08-45c5-bf7c-ff79c35a838c 

您检查服务器上的标题,只提供服务的文件回来,如果所需的标题是接收。你保持标题有点秘密,但不是用SSL难以穿透。

0

我只会回答你关于应用验证的原始问题。你的其他问题属于不同的问题。

如果它只是您的客户端和服务器,您可以(也应该)使用相互认证的SSL,而无需购买任何东西。您控制服务器和客户端,因此每个应只信任一个属于另一个的证书,并且您不需要CA用于此目的。

这是高层次的方法。创建一个自签名服务器SSL证书并部署到您的Web服务器上。为此,您可以使用Android SDK附带的keytool。然后创建一个自签名客户端,并将其作为资源部署在您的应用程序中的一个自定义密钥库中(keytool也会生成这个)。将服务器配置为需要客户端SSL身份验证,并仅接受您生成的客户端证书。配置客户端使用该客户端证书来标识自身,并且只接受您在服务器上安装的那一部分服务器端证书。

这是一个比这里保证的更长的答案。我建议分步实施,因为网上有资源介绍如何处理Android中的自签名SSL证书,包括服务器和客户端。在O'Reilly出版的我的书“Android应用安全平台”中也有一篇完整的介绍。

您通常会将该证书/私钥存储在某种类型的密钥库中(如果您使用的是Android,则为KeyStore)并且该密钥库将被加密。该加密基于密码,因此您需要(1)将密码存储在客户端的某处,或(2)在启动客户端应用程序时询问用户密码。你需要做什么取决于你的用例。如果(2)可以接受,那么你已经保护了你的凭证免受逆向工程,因为它将被加密并且密码将不会被存储在任何地方(但用户需要每次都键入)。如果你做了(1),那么有人能够逆向工程你的客户端,获取密码,获得密钥库,解密私钥和证书,并创建另一个能够连接到服务器的客户端。

没有什么可以做,以防止这种情况;你可以更难地对你的代码进行逆向工程(通过混淆等),但是你不能让它变得不可能。您需要确定您尝试采用这些方法缓解的风险是多少,以及需要做多少工作才能缓解风险。

相关问题