情景:
一个网络应用程序,一旦新用户完成注册,将发送一封电子邮件,其中包含一个曾在iOS设备中点击的URL,iOS应用程序将启动。此方案是让用户使用移动应用程序的经典方案。
在实施它时(使用URL方案),我们开始想知道这种方法有多安全?从理论上讲 - 恶意应用程序可以注册相同的URL方案,并且根据Apple的说法:
注意:如果多个第三方应用注册处理相同的URL方案,则目前没有确定将为该方案提供哪个应用的流程。
Implementing Custom URL Schemes by Apple
在这种情况下,如果用户正在点击电子邮件中的网址,则不知道将启动两个(或更多应用)中的哪一个(我们的或恶意的)。让我们说一个不同的应用程序正在推出 - 如果它真的是恶意的,理论上它可以模仿我们的应用程序的登录页面并获取用户的凭据。
是否有处理此类情况的最佳做法?我已经阅读了很多关于这个问题的文章,他们都声称唯一的解决方案是等待Apple使这些网址方案独一无二。 example1, example2
如果存在,我很想听听有关该问题的任何解决方案, 提前谢谢!
答案 0 :(得分:4)
我们必须假设恶意应用可以拦截此网址中包含的所有数据,并且其作者可以自由地对您应用中包含的任何行为进行逆向工程,以便它可以模仿您的用户界面以及您的应用尝试的任何验证去表演。但是,我们也可以假设恶意应用程序包含在自己的沙箱中,因此您的应用程序可以私下与您的后端进行通信。恶意应用程序可以模仿任何此类通信,但这确实允许我们构建恶意应用程序未知的秘密。这给了我们至少一个设计一些对策的机会。
一个选项可能是:
现在,我们已将数据发送到您的应用,该数据可能会重定向到恶意应用,但恶意应用无法读取。这是一个部分解决方案。我们仍然需要小心设计一个不鼓励用户陷入网络钓鱼攻击的UI,因为URL可能仍会启动冒名顶替。
编码数据可能是我们可用于对用户进行身份验证的令牌,因此永远不需要他们在应用内重新进行身份验证。然后没有模仿的登录屏幕(虽然聪明的伪造可能仍然足以欺骗用户泄露他们的凭据)。
另一种方法是使用存储在客户端上的类似的每用户秘密作为盐来与用户的密码结合使用。他们的密码本身可能不足以进行身份验证,因此捕获其凭据的恶意应用程序无法立即访问其帐户。
另一种设计可以是允许用户以可识别的方式定制他们的体验。您可以在登录屏幕上显示所选的个人资料图像。如果只有您的应用程序知道该选择,那么模仿者不应该能够可靠地复制它(再次,不能保证这意味着用户会捕获欺骗)。
所有这些都引入了权衡;用户可能仍然被欺骗向恶意应用程序泄露信息,无论它们与合法客户端有多么不同,客户端机密可以通过其他攻击提取,并且您需要一个计划来支持切换,丢失或升级设备的用户。您必须确定这些是否真正提高了用户的安全性,以及是否值得付出实施成本。
答案 1 :(得分:1)
尝试这样的事情:
在您的电子邮件中,说明点击该网址会启动该应用并首次登录,然后提示用户输入新密码。在URL中包含一个令牌,当您的应用程序处理该签名时,会执行一次性登录并将用户置于“新密码”页面。
如果恶意应用也注册了您的自定义网址并窃取了链接,那么他们应该(希望)无法对其进行太多操作。即使他们复制你的界面并提示用户输入新密码,它也无法实现任何目标。
编辑:在进一步思考之后,只要你有一个活跃的攻击者,你就差点搞砸了。只要他们能够劫持该初始URL,攻击者就可以继续模仿您的应用程序,无论您做什么,都可以有效地对您进行操作。我的解决方案只适用于最基本的情况,而不是真正可靠。