如何检测用户是不是从已识别的计算机连接?

Posted

技术标签:

【中文标题】如何检测用户是不是从已识别的计算机连接?【英文标题】:How to detect if user is connecting from a recognized computer?如何检测用户是否从已识别的计算机连接? 【发布时间】:2011-01-14 03:56:11 【问题描述】:

在许多银行和投资网站上,该网站会阻止用户在未先回答其他问题或激活该计算机的情况下从无法识别的计算机登录。开发人员通常如何创建此功能?

例如,当我从无法识别的机器连接到我的帐户时,Salesforce.com 给出的消息如下:

我们正在尝试从我们的一个应用程序中执行相同类型的操作,但不确定最佳(也是最安全)的方法。

【问题讨论】:

【参考方案1】:

没有真正安全的方法,您可以根据 IP 地址执行此操作,但这通常是动态的,您可以在 cookie 上执行此操作,但它们远非安全,您可以在 MAC 地址上执行此操作,但您会需要使用 Java (IIRC) 来访问它,但这又可以被欺骗......

没有真正的方法可以检查他们连接的计算机是否曾经连接过。你可能会找到“黑客”来做这件事,但它永远不会是安全的。

【讨论】:

我意识到,一旦将计算机连接到另一台计算机,就永远不会有 100% 安全的方法来处理任何事情。我只是在寻找安全的方式 =)【参考方案2】:

您可以在用户机器上设置 cookie,然后检查该 cookie 是否存在并包含正确的值。如果 cookie 不存在,那么这台计算机是一个新的,否则这台计算机以前就在这里。

cookies 值可以是一些随机散列,具有不同的属性,例如 IP 地址、用户代理等...

【讨论】:

【参考方案3】:

有许多可能的方法来做到这一点,但通常他们使用以下的某种组合:

您要连接的 IP 范围 您的主机名 成功验证后网站留下的 cookie 存在于您的计算机上 用户代理字符串

如果您与现有的受信任连接之一有太多差异,则该计算机被视为不受信任。 “太多”的界限是在安全性和便利性之间进行权衡。

【讨论】:

【参考方案4】:

电子前沿基金会 (EFF) 建立了一个演示网站,展示了即使禁用 cookie 或您从不同的 IP/提供商连接,识别浏览器是多么容易:

Panopticlick: How unique - and trackable is your browser

他们使用组合

用户代理字符串 HTTP 标头 已安装浏览器插件 时区 屏幕尺寸和颜色分辨率 系统字体 Cookie 设置

但是,典型的场景(也可能是您的示例应用程序中使用的场景)是在本地存储一个 cookie 并通过这个 cookie 识别返回的用户。

【讨论】:

酷网站!我们的应用程序需要 cookie(企业 HR 包),所以我们不太担心无 cookie 识别。另外,我无法想象这些数据中的任何一个对我们的目的有用 - 如果用户每次升级 Firefox、更改屏幕尺寸等时都需要重新授权,那将是一件痛苦的事。不是吗? 【参考方案5】:

毫无疑问,最安全的方法是颁发客户端证书,并让服务器在连接时检查证书(确保并使用吊销列表!)。这有相当多的管理开销,但很有效。

【讨论】:

难道我们不需要让客户端手动安装客户端证书吗?【参考方案6】:

大多数***网站都使用 Flash cookie 来跟踪唯一身份访问者。 Flash cookie 类似于常规浏览器 cookie,但不会在用户切换浏览器或清除浏览器历史记录时清除。

再读一遍:您可以尝试清除历史记录或切换浏览器,甚至使用 chrome 的“隐身”模式,Flash cookie 仍会记住您的身份。它们与 Flash 安装而非浏览器相关联。

Wired 在这里有一篇关于它们的文章: http://www.wired.com/epicenter/2009/08/you-deleted-your-cookies-think-again/

尽管 Wired 对 Flash cookie 发出警告,但他们自己使用 Flash cookie 来跟踪访问者。去图吧。

在 Flash 中,它们被称为“SharedObjects”。在此处查看有关如何使用它们的更多信息: How do I access cookies within Flash?

【讨论】:

我怀疑银行、金融或类似安全的网站会使用 Flash cookie 的想法,对吧? 美国银行广受好评的 SiteKey 系统依靠 Flash Cookie(共享对象)来唯一标识用户。查看他们的常见问题解答:bankofamerica.com/small_business/online_banking_and_services/…

以上是关于如何检测用户是不是从已识别的计算机连接?的主要内容,如果未能解决你的问题,请参考以下文章

警告:尝试显示不在窗口层次结构中的视图!使用已识别的 segue 时

Jetty如何检测HTTP连接是不是被客户端关闭

计算所有不可删除文件的总大小(包括子目录中的文件)

没有第二个账号查询AD,如何检测AD用户密码是不是过期?

电脑上怎么建立远程桌面连接为啥总是不成功

如何使用自定义表格视图单元格中识别的点击手势从 UILabel 呈现视图控制器?