【问题标题】:How to save sensitive data as a password in firemonkey?如何在firemonkey中将敏感数据保存为密码?
【发布时间】:2017-07-25 15:41:47
【问题描述】:

我正在使用 Firemonkey 开发一个安卓应用程序。这个应用程序使用 Rest 向 WebApi 发出请求并返回 json 结果。 API 已经开发完成,每个请求都需要将用户和密码作为查询字符串发送以返回数据。我的问题是:在 firemonkey (android) 中保存敏感数据的最佳方法是什么。当然,首先想到的是使用加密来存储此类数据,但是 firemonkey 是否有任何本机和安全的功能呢?

【问题讨论】:

  • 这对我来说意义不大,查询字符串中的纯文本比 Android 的内部存储更容易受到破坏。

标签: android delphi firemonkey delphi-10.1-berlin firemonkey-fm3


【解决方案1】:

不要保存它。如果确实需要安全,请根据需要从服务器请求它。如果密钥和数据保存在同一台机器上,就没有安全加密之类的东西。

【讨论】:

  • 我认为问题是询问如何存储 用户的 密码,无法从服务器请求。尽管在这种情况下“不要保存它”仍然是一个有效的答案,但它似乎不是一个非常有用的答案。许多应用程序都提供了记住登录信息的功能,以使用户不必每次启动时都进行身份验证,我认为这个问题只是询问如何做到这一点。
  • @RobKennedy 您使用生成的访问令牌。十多年来,这一直是一个已解决的问题 - 您永远不会在客户端上存储密码,无论是否加密。
  • 所以写下这个答案。
  • @Gabe Sechan 例如由 oauth2 生成的令牌会在一段时间后过期,对吗?您知道无限期保留令牌的任何方法吗?不过,很抱歉我的无知,如果用户可以访问存储的令牌,他也将无法访问系统?
  • 只是不要在后端使它们过期。但正确的答案是在接近到期时通过发送一个新的应用替换旧的来刷新它们。
【解决方案2】:

不要加密密码,当攻击者得到数据库时,他也会得到加密密钥。

仅使用哈希函数是不够的,仅添加盐对提高安全性无济于事。

取而代之的是 iIterate over an HMAC with a random salt for about 100ms duration and save the salt with the hash.使用PBKDF2password_hashBcrypt等函数和类似函数。关键是让攻击者花费大量时间通过蛮力寻找密码。

不要在查询字符串中发送用户的密码,使用 HTTP 连接时它是明文的,使用 HTTPS 连接时它会被加密但可能最终会出现在服务器日志文件中

【讨论】:

  • @Zafe 您对在设备上保存访问令牌有何看法?
  • 是的,但是根据问题 OP 无法控制 web 服务,它需要以这种不安全的方式获取凭据。
  • @FreeConsulting 然后 OP 有一个问题,要么将用户置于危险之中,要么推回并拒绝贡献。 IMO 我们需要停止生产不安全的产品。您是否建议为创建将用户置于危险之中的不安全网站做出贡献?
  • @Zafe 通常可以将授权令牌保存在设备上的安全存储、iOS Keychain 和 Android Keystore 中。了解用户有权访问以及设备是否受到攻击者的攻击。如果使用 HTTPS(应该使用),则应固定证书以避免 MITM 攻击。
猜你喜欢
  • 2011-01-19
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 2016-12-26
  • 2019-12-05
  • 1970-01-01
相关资源
最近更新 更多