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

Mad*_*iha 31 web-applications ip-address geolocation ip-geolocation

我注意到有几个Web服务(即Steam,Facebook,Google等)能够检测到新的浏览器/新位置,在某些情况下,要求我使用电子邮件代码对其进行验证.

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

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

小智 31

以下是您可能感兴趣的一些想法......

正如我已经对你说的那样,这不是一门精确的科学.您应该首先保留对安全性至关重要的内容,并将所有这些视为"可选"

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


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

访问cookie(s)

首先,access token cookie可能不一定与device id cookie实际上不同,访问令牌可用于唯一地标识浏览器,即使令牌字符串经常以这种方式更新:1 session = 1 device.

相反,如果您想将同一设备视为两个或更多浏览器,您当然应该使用两个不同的cookie.1个设备= Chrome上的1个会话+ Firefox上的1个会话等.

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

知识产权

如何记录IP?

每次用户将IP更改为您认为有效的IP时,都应记录它.这意味着您需要一个表来记录所有IP sessionID | IP | lastActionDateTime | [other factors]+.如果包含deviceID和IP组合的行已存在,并且如果lastActionDateTime在12-24小时内进行了更新lastActionDT,则会更新,否则应创建新行.除非其他因素发生变化.

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

使用GEOIP数据库,您可以获得用户的位置:这甚至不可靠,但您可以使用Google Maps API检查上一个已知位置与与IP关联的新位置之间的距离,或者GEOIP数据库是否已经提供你LAT,LONG值你可以简单地计算两点之间的距离(这里有更多的信息,但网上有很多文章 ......我实际上没有检查它,但应该没问题).所以,假设你可以认为有效的IP距离上一个已知位置100-500km.

当IP发生变化时?

  • 使用3G IP可能会改变甚至走一些步骤,所以如果你用一些不同的IP重新设置页面视图,并且最近的一些页面视图是使用相同的IP制作的,你必须认为IP有效,因为它只对某些有效在(lastActionDT)之前的分钟,当然相应于其他因素的状态,这些因素应该与最后已知的因素相同.

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

  • 如果您在很多天不活动后检测到更改的IP,则应请求再次使用该表单登录.这里的会话已过期,但cookie仍然存在且可用,因此如果表单凭据有效,您将更新deviceID到期而不是创建新的deviceID.

UA字符串

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

  • 用户可能已经使用了用户代理切换器.
  • 用户在同一台​​计算机上的另一个浏览器上导入了首选项(包括cookie).
  • 会话cookie被盗了.

所以,这是非常不可靠的,但正如你可以想象的那样,它提供了一些提示.

(奖金)屏幕属性

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

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

...请记住,移动设备上的值可能会被反转(检查window.screen.orientation)

(奖金)地理位置API

可以使用HTML5 Geolocation API进行另一项额外的检查(当然也在那里,因为客户端是安全性不可靠的,但如果与之前的因素配合使用它会很有用) Geolocation API Spec

希望对你有所帮助......

韦斯