如何检查可疑登录?

时间:2017-10-01 23:32:43

标签: javascript node.js geolocation ip

因此,为了避免这个问题过于宽泛,我将在我的确切案例中提供所使用的方法/背景,但随时提供解决此问题的一般方法,因为它仍然有用。

目的

这可能有点矫枉过正,但Google等大型科技公司如果怀疑登录该帐户是可疑的,会通知他们的用户。我也知道,如果网站看起来可疑,会阻止正确的登录尝试,例如:登录到从未在美国境外登录的印度帐户。对于某些网站,人们需要这种级别的覆盖和保护。

背景

我有一个使用iplocation的NodeJS express项目,并将ip数据和用户代理保存到数据库以跟踪最新的登录。 我试图找到一种方法来检测基于位置的可疑登录,然后在极端情况下通知用户或采取适当的措施。

以下是存储登录记录的示例:

"ip" : {
    "ip" : "86.149.49.121",
    "country_code" : "GB",
    "country_name" : "United Kingdom",
    "region_code" : "ENG",
    "region_name" : "England",
    "city" : "Harwich",
    "zip_code" : "CO12",
    "time_zone" : "Europe/London",
    "latitude" : 51.95,
    "longitude" : 1.3,
    "metro_code" : 0
},
"ua" : {
    "version" : "61.0.3163.100",
    "source" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",
    "os" : "macOS Sierra",
    "browser" : "Chrome"
},
"timestamp" : ISODate("2017-10-01T02:00:45.452Z"),
"__v" : 0

途径

  1. 用户代理检查 - 非常弱的情况。我可以检查并比较用户代理(browseros)以查看是否使用了其他设备。但是,众所周知,人们不会只使用一台设备,所以我不能真正看到它有效或有用。

  2. 国家/地区检查 - 我发现的更好的方法是检查国家/地区(或更准确的结果,地区)。如果新的国家/地区与标准不匹配,那么这将是可疑的。但这可能包括误报,例如,如果你住在两个国家的边界​​。

  3. 长/纬度范围检查 - 最后我认为更好的方法是看用户是否相对接近他们的平均长/纬度。因为这样可以让人们居住在附近的国家,如果他们住在边境附近但不依赖于检查其邻居的每个国家名称。

  4. 代码示例:

    var withinLongitude, withinLatitude;
    
    // check if within 1 degree of latitude (about 69 miles either side)
    if (loginAttempt.lat > (avgLat - 1) && loginAttempt.lat < (avgLat + 1) ) {
        withinLongitude = true;
    }
    
    // check if within 1 degree of longitude (usually more than 50 miles, at most 69 miles either side)
    if (loginAttempt.lon > (avgLon - 1) && loginAttempt.lon < (avgLon + 1) ) {
        withinLatitude = true;
    }
    
    if (withinLongitude && withinLatitude) {
        // assume a normal login, handle login process
    } else {
        // could be a suspicious login, email user
    }
    

    显然,IP检查并不总是可靠的,用户可能正在使用VPN,但您的想法如何? 这是否足够可靠,或者我应该以不同的方式考虑这个问题吗?

0 个答案:

没有答案