0

我到处搜索,发现了很多我无法理解的信息。我正在使用 WAMP 服务器并设法执行“从表名中选择名称”查询并将数据传递给json_encode(). 我喜欢目前的结果,但现在我需要保护服务器中的 JSON 文件,使其只有运行我的 Android 应用程序的用户才能访问。

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

我的申请流程

如果您可以向我指出与该主题相关的视频教程或初学者教程,那将会很有帮助。

这是我的具体问题?

  • 我可以用 JSON 解析图像吗?
  • mysqldump --> 转换 .csv 文件 ---> SQLite 效率更高吗?(安全地)。
  • 如果数据库中有 100 万个条目,.CSV 文件可以有多大?
  • 我怎样才能完成这一切?

请帮忙,谢谢。

4

2 回答 2

0

我只会回答您关于应用程序身份验证的原始问题。您的其他问题属于单独的问题。

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

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

一步一步的回答比这里保证的要长得多。我建议分阶段执行此操作,因为网络上有关于如何在服务器端和客户端处理 Android 中的自签名 SSL 证书的资源。O'Reilly 出版的我的书《Android 平台的应用程序安全性》中也有完整的演练。

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

您无法采取任何措施来防止这种情况发生;你可以使你的代码更难逆向工程(通过混淆等),但你不能让它变得不可能。您需要确定使用这些方法试图减轻的风险是什么,以及需要做多少工作来减轻风险。

于 2012-04-16T12:03:30.593 回答
0

解决方案:使用 HTTP 标头

不安全的解决方案:

使用 User-Agent 标头。

User-Agent: MyAndroidApp/1.0

更安全的解决方案:

首先,您需要使用 SSL,这样没有人可以轻易地看到您的密钥。

其次,您可以在从 Android 应用程序发出的请求的 HTTP 标头中放置一个密钥:

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

您检查服务器上的标头,并且仅在收到所需的标头时才返回文件。您将标头保密,但并非无法使用 SSL。

于 2012-04-16T01:06:11.577 回答