我注意到一些网络服务(即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的需求。