【问题标题】:How to send app data securely to a recipient/server如何将应用程序数据安全地发送到收件人/服务器
【发布时间】:2023-03-02 21:07:01
【问题描述】:

我目前正在开发一个 android 应用程序,用户必须填写并成功将一些文本字段的数据发送到收件人/服务器,以启用一项功能。

最大的问题是如何以安全的方式做到这一点,以防止例如反编译。我关心的不是传输过程中的安全,而是传输介质的安全。

到目前为止我的想法/阅读:

  1. 我可以使用 Java Mail API 通过邮件发送数据。 首先,我不想要求用户必须输入他的邮件凭据和 SMTP 服务器。 不过,这意味着我必须将凭据包含在应用程序中的邮件帐户中。 为了避免有人反编译应用程序并接管我的邮件帐户的情况,我想到了加密方法,但是即使我将密码的aes加密版本保存起来,攻击者也可以反编译应用程序并添加一个syso来输出解密密码。 这同样适用于 OAuth 身份验证,因为我必须存储身份验证令牌。 除了邮件版本,我还阅读了一些关于通过网络服务的 POST 请求获取密码的内容,这似乎一点也不安全。

    我可以在不需要凭据的情况下搜索免费的 smtp 服务器,但我想要一些我可以依赖的东西,而不是每天醒来查看服务是否仍然有效。

  2. 将数据发送到 Web 服务。 好吧,这对我来说需要更多的工作,但我会接受这一点,如果有一个解决方案不需要在应用程序中保存凭据或有一个接受所有人数据的网络服务。

我是否忽略了什么?或者没有询问用户他的邮件凭据或谷歌帐户等的安全方法吗?

【问题讨论】:

  • 也许你应该去看看 www.parse.com(如果你还没有的话)
  • 发送前——连接服务器(握手),将公钥发送给客户端,将加密后的消息发送给服务器,用私钥解密。
  • 正如我在问题中所说,我不担心运输过程中的安全问题。在你的解决方案中,每个人都可以用虚假数据淹没我的网络服务。

标签: java android security encryption


【解决方案1】:
  1. OAuth 可能会起作用。 OAuth 的好处在于,如果令牌被泄露,它可以在服务器端被撤销。

  2. 您可以创建一个在某个端口上接受 TCP 连接的 Web 服务。您可以有一些身份验证机制,例如在接受数据之前执行的摘要式身份验证。

另一种选择是使用 API,例如 Golgi。 Golgi 需要开发者密钥、应用程序密钥和应用程序实例 ID 来连接服务器并发送数据。如果这些凭据以某种方式被泄露,您只需更改应用密钥并通过 Play 商店推送新版本的应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多