我正在通过电话号码验证在我的应用中实施2FA。由于SMS不是免费的,因此我确实需要确保对服务器的请求来自我的应用程序,而不是来自任何第三方http请求启动器。
为此,我想到了使用服务器在应用程序中提供的密钥对http请求进行加密,然后发送该加密请求。由于我的应用程序是二进制文件(当然,这不适用于Web),因此我认为很难看到加密方法。该过程如下:
我看不到有任何损害该系统的东西,除非有人设法从Apple / android二进制应用程序读取该应用程序使用的加密系统。
您认为这可以是一个很好的过程吗?您看到任何危害该系统的方法吗?从二进制文件读取真的很困难吗?
答案 0 :(得分:2)
从android的角度来看,我将从您设计的缺陷开始,即使您为应用启用了pro-guard,我们仍然可以反编译该应用并追溯api调用
如果您的服务器未使用HTTPS-可以轻松跟踪正在进行的呼叫 通过代理服务器之类的路由返回到后端服务器 查尔斯代理,并分析响应,即使您使用的是 https可以安装ssl证书来信任代理,并且 得到回应。还可以通过分析出站请求 可以从应用中提取签名密钥
很容易反编译apk包并在IDE中打开它,并且 通过输入“ api”搜索后端服务器网址或 ide项目搜索窗口中的'http','https'关键字
如果将机密存储在共享首选项或存储中,则它将 如果攻击者具有文件的root访问权限,则可以从设备读取 系统。
然后将密钥从其存储中删除,因此没有人可以使用它。 对于上述情况,我将运行该应用程序,一旦它存储了密钥,我便可以将权限更改为只读,因此即使该应用程序尝试将其删除,也不会将其删除
您可以使用SSL固定,然后将密钥放入已编译的库中,从而使攻击者难以解密密钥,还需要确保不创建任何其他漏洞
答案 1 :(得分:0)
您还可以通过备用渠道(例如电子邮件)在应用程序和服务器之间共享公用密钥。用户一旦注册了该应用程序,就会收到其中带有QR码的电子邮件,该电子邮件一旦扫描便会提供服务器密钥。这种方法的安全性与授权用户对电子邮件的安全访问密切相关。
您可以让他们遵循将加密请求发送到服务器以验证电话号码的标准方法,一旦完成,您可以从应用存储中删除数据。