某些 Web 服务如何识别我正在从新位置登录?



我注意到一些网络服务(即Steam, Facebook, Google等)能够检测到新浏览器/新位置,并且在某些情况下,需要我用电子邮件代码验证它。

他们是怎么做到的?他们用饼干吗?还有别的办法吗?这有多可靠?

我如何检测用户是否从他的"正常"环境登录,是相同的浏览器,相同的计算机,相同的大致位置?

这里有一些你可能感兴趣的想法…

正如我已经说过的,这不是一门精确的科学。您应该将对安全性重要的内容放在首位,并将所有这些都视为"可选的">

另外,请记住,所有建议的"持续时间"都是主观的,这取决于访问您的站点的狂热程度以及设备的检测强度。


这些因素可能有助于识别设备:

访问cookie

首先,access token cookie不一定与device id cookie不同,事实上,一个访问令牌可以用来唯一地标识一个浏览器,即使令牌字符串以这种方式频繁更新:1个会话= 1个设备。

相反,如果你想在同一设备上使用两个或多个浏览器,你当然应该使用两个不同的cookie。1台设备= 1个chrome会话+ 1个firefox会话,等等

其次,cookie(s)应该"永不"过期(将其设置为以年为单位过期)。如果您想要终止"记住我"的持续时间,您应该只在代码中执行此操作。这个,因为一个"永不"过期的cookie实际上是与过期的会话相关联的,它对于识别用户正在使用的设备仍然很有用!此外,当用户注销时,不要删除cookie,而是在代码中内部销毁会话。

<标题>

IP h1> 何记录ip ?每次用户将IP更改为您认为有效的IP时,您都应该记录它。这意味着您需要一个表来记录所有的IPssessionID | IP | lastActionDateTime | [other factors]+。如果一行包含deviceID &IP已经存在,如果lastActionDateTime是在12-24小时内创建的,那么您将更新lastActionDT,否则您应该创建一个新行。除非其他因素改变。

如何检查更改后的IP是否有效?

使用GEOIP数据库你可以得到用户的位置:这一点都不可靠,但是您可以使用Google Maps API来检查最后一个已知位置和与IP关联的新位置之间的距离,或者如果GEOIP数据库已经提供了LAT, LONG值,则可以简单地计算两点之间的距离(更多信息在这里,但许多文章可以在网上找到…我实际上没有检查它,但它应该是好的)。因此,假设您可以考虑距离最后已知位置100-500公里的IP有效。

IP何时发生变化?

  • 使用3G IP可能会改变甚至走一些步骤,所以如果你收到一些不同IP的页面浏览量,并且最近以前的页面浏览量是用相同的IP进行的,你必须认为这个IP是有效的,因为它在几分钟前(lastActionDT)是有效的,当然这取决于其他因素的状态,这些因素应该与最后已知的相同。

  • 如果您在几个小时后检测到IP更改或者可能是几天不活动,您可能希望认为它有效并允许登录,特别是如果其他因素匹配,或者如果您想要更强的安全性,您可以将这种情况处理如下:

  • 如果你检测到一个改变的IP后,很多天不活动,你应该请求再次登录与表单。这里会话已经过期,但是cookie仍然存在并且可用,所以如果表单凭证有效,您将更新deviceID过期,而不是创建一个新的deviceID

UA String

UA字符串提供了一些额外的检查,但在大多数情况下不一定相关,但对于检测可疑的版本变更很有用(例如,如果同一会话首先生成Chrome 27.0页面浏览量,您会怎么想过一段时间Chrome 26.0页面浏览量?)。

  • 用户可能使用了用户代理切换器。
  • 用户在同一机器的另一个浏览器上导入首选项(包括cookie)。
  • 会话cookie被窃取。

所以,这是非常不可靠的,但你可以想象,它提供了一些提示。

(bonus) The Screen Properties

如果你想考虑同一台电脑上的两个浏览器相同的"设备",你可以使用javascript(当然,因为它是一个客户端检查,它是不可信的安全,但仍然有帮助…例如,如果有人窃取会话cookie,他可能不知道他还需要伪造您将用于额外检查的这些值:-P)。无论如何,window.screen包含了这些属性,它们对于唯一标识操作系统/计算机非常有用

  • window.screen.availWidth&window.screen.availHeight
  • window.screen.availLeft&window.screen.availTop
  • window.screen.width&window.screen.height

…请记住,移动设备上的值可能会动态反转(checkwindow.screen.orientation)

(附加)地理定位API

另一个额外的检查可以使用HTML5地理定位API(当然也有,因为是客户端,它是不可信的安全,但它是有帮助的,如果使用与上述因素合作)地理定位API规范

希望对您有所帮助。

韦斯

免责声明: 我和Steam没有任何关系


他们使用cookie吗?

也许,您可以使用网络嗅探器找到它。请参阅:

  • 如何捕获从路由器到特定服务器的数据包?

及其他相关资料。

其他方式吗?

可能,您需要通过分析流量来找出可能需要您对其进行中间人攻击的流量。这可能很难完成,因此你也可以尝试联系Steam的技术支持并要求技术文档。这两个动作都会帮助你找到更多。

这有多可靠?

可靠性通常取决于需求,所以我认为它足够可靠以满足Steam的需求。

相关内容

  • 没有找到相关文章

最新更新