在许多银行和投资网站上,该网站会阻止用户在未先回答其他问题或激活该计算机的情况下从无法识别的计算机登录。开发人员通常如何创建此功能?
例如,当我从无法识别的机器连接到我的帐户时,Salesforce.com 给出的消息如下:
我们正在尝试从我们的一个应用程序中执行相同类型的操作,但不确定最佳(也是最安全)的方法。
在许多银行和投资网站上,该网站会阻止用户在未先回答其他问题或激活该计算机的情况下从无法识别的计算机登录。开发人员通常如何创建此功能?
例如,当我从无法识别的机器连接到我的帐户时,Salesforce.com 给出的消息如下:
我们正在尝试从我们的一个应用程序中执行相同类型的操作,但不确定最佳(也是最安全)的方法。
有许多可能的方法可以做到这一点,但通常他们使用以下某种组合:
如果您与现有的受信任连接之一有太多差异,则该计算机被视为不受信任。为“太多”划定界限是安全性和便利性之间的权衡。
没有真正安全的方法,您可以根据 IP 地址执行此操作,但这通常是动态的,您可以在 cookie 上执行此操作,但它们远非安全,您可以在 MAC 地址上执行此操作,但您需要使用Java (IIRC) 可以访问它,但这又可以被欺骗......
没有真正的方法可以检查他们连接的计算机是否曾经连接过。你可能会找到“黑客”来做这件事,但它永远不会是安全的。
您可以在用户机器上设置 cookie,然后检查该 cookie 是否存在并包含正确的值。如果 cookie 不存在,那么这台计算机是新的,否则这台计算机以前就在这里。
cookie 值可以是一些随机散列,具有不同的属性,例如 IP 地址、用户代理等...
电子前沿基金会 (EFF) 建立了一个演示网站,展示了即使禁用了 cookie 或您从不同的 IP/提供商连接,识别浏览器是多么容易:
他们使用的组合
但是,典型的场景(可能是您的示例应用程序中使用的场景)是在本地存储一个 cookie 并通过这个 cookie 识别返回的用户。
最安全的方法无疑是颁发客户端证书,并让服务器在连接时检查证书(确保并使用吊销列表!)。这有相当多的管理开销,但有效。
大多数顶级网站都使用 Flash cookie 来跟踪唯一身份访问者。Flash cookie 类似于常规浏览器 cookie,但在用户切换浏览器或清除浏览器历史记录时不会被清除。
再读一遍:您可以尝试清除历史记录或切换浏览器,甚至使用 chrome 的“隐身”模式,Flash cookie 仍会记住您的身份。它们与 Flash 安装而非浏览器相关联。
Wired 在这里有一篇关于它们的文章:http: //www.wired.com/epicenter/2009/08/you-deleted-your-cookies-think-again/
尽管连线对 Flash cookie 发出警告,但他们自己使用 Flash cookie 来跟踪访问者。去搞清楚。
在 Flash 中,它们被称为“SharedObjects”。在此处查看有关如何使用它们的更多信息: 如何在 Flash 中访问 cookie?