我刚刚发现一家波兰银行的网站强制用户仅在一个浏览器选项卡中打开它。例如,您无法在查找要汇款的帐号时检查您的转账历史记录。除了可能的安全原因,我想不出这样做的任何充分理由。将站点限制为仅一个站点是否有安全优势?如果是这样,它们是什么?
强制网站一次只能从一个选项卡访问是否有安全优势?
通常,不,强制用户使用单个选项卡是不合理的。使网站仅可用于单个选项卡没有技术安全原因。由于系统设计不佳,这通常很常见。
强制使用单个选项卡还意味着当您注销时,您不会将敏感信息粘贴在其他 20 个选项卡中。虽然这是一个糟糕的理由,因为对此感到困扰的网站可以使用 localStorage 或 websocket 在从一个选项卡注销时同时清除所有选项卡。
安全的人为因素是一些网站可能故意将自己限制为单个选项卡的一个边际原因。通过强制使用单个选项卡,您可以迫使人们一次只专注于一件事,这使您不太可能忘记某些事情。IMO,这是一个糟糕的理由,因为弊大于利。
这种限制不是由安全措施引起的,而仅仅是由经济措施引起的。
您观察到的这种行为实际上可以在许多内部企业 Web 应用程序中找到,并且您会发现它与 Java J2EE Web 应用程序服务器(IBM WebSphere Application Server 是最普遍的)有很多联系。
虽然依赖于轻客户端(通用 Web 浏览器),但此类应用程序的设计通常(较差)与使用重客户端(从安装在计算机上的可执行文件运行的软件)的应用程序相同。
网站通常在设计时考虑到请求 - 响应模型。设计者决定哪些请求被允许给用户,以及适当的服务器的处理和回答应该是什么。这方便您打开任意数量的选项卡,因为每次您的浏览器只是向服务器发送请求。
但是您所面临的 Web 应用程序在设计时就考虑到了状态转换模型。
使用繁重的客户端软件,您将被限制在非常精确的工作流程中:当您单击一个项目时,您会看到一些选项,您将被迫选择其中一个或单击“取消”按钮(如果可用),您可能无法在不先通过其他一些窗口或菜单的情况下直接打开某个窗口,根据您当前正在进行的操作等,某些选项可能并不总是可以访问或启用。
在任何时候,您都处于某种确定的状态,并且根据您对应用程序控件的操作,您将从当前状态切换到另一个状态,依此类推。每个可能的状态转换都由应用程序设计者很好地定义。
这样的 Web 应用程序只是将这种最初为重型客户端应用程序设计的开发模型,并将其应用于 Web 应用程序。显然,这不能很好地扩展,因为通过打开多个选项卡,您会混淆无法确定您当前状态的应用程序:您是在查询您的帐户余额还是输入新的银行转账?两者都不能接受,你当时只能处于一种状态!而且我什至没有提到浏览器的特定功能,例如后退按钮或为特定页面添加书签,这些 Web 应用程序通常不支持这些功能。
这不是一种安全选择,只是一种经济的选择,因为它使应用程序编程更容易、更快,因此更便宜。
在与 8 家以某种方式实施此功能的银行合作后,我确信这是一项重要的安全功能。它是一个选项卡是无关紧要的,但限制到一个实例对于减少许多攻击路线非常有帮助。
如果您允许多个实例,则攻击者可能会在有效会话期间从另一台计算机进行攻击。如果您只允许一个,那么它的大多数变体都会被删除。
这些银行实施它的一般方式是检查令牌/cookie,并在协商新会话后立即关闭任何存在的会话,而不是携带这是一个新的标签、浏览器还是其他任何东西。
有一家瑞典银行在做这件事。他们在每个请求上传递一个单一的使用令牌,因此没有请求可以被执行两次。这意味着如果有人设法窃取了您的会话 cookie,他们将无法在没有任何人注意的情况下使用它。
这是对安全性的一个小小的补充(现在甚至可能没有增加,因为 SSL/TLS 已经变得更好了),对用户体验的影响相当大。
其他银行,如 Klarna,使用单击支付解决方案来极大地提升用户体验,但要确保它的安全性要困难得多。
最终,银行负责进行这种权衡,将用户限制在单个选项卡可能会有所帮助,例如降低用户忘记关闭所有选项卡时泄露敏感数据的风险。