为了加强身份验证机制(网络),我想为每次尝试记录用户指纹并应用模式识别来区分恶意尝试。例如,如果用户总是从欧洲计算机登录并且尝试从中国进行登录,则用户将被阻止,直到用户确认(例如通过电子邮件)允许从中国登录。
我在大学课程中对模式识别的了解非常非常少。但是,我想不起开始开发这项服务了。我所知道的是,您应该查看这些不同的功能:
- 浏览器代理字符串,产生:
- 操作系统
- 浏览器供应商
- IP地址,产生:
- 地点
- 登录时间戳
- (失败的)尝试次数(在会话内,或总数)
您搜索模式并且任何非同寻常的尝试都会被标记,因为它不遵循平均模式。您可能会应用一个阈值,因此如果用户在晚上登录或拥有一台新 PC,它仍然可以工作。
还有一些要求:首先,必须实时检查尝试。如果凭据正常,您将无法在 2 分钟后阻止访问,但您后来发现该尝试可能是恶意的。此外,我们所有的应用程序都是用 PHP 编写的,但 PHP 可能太慢了。那时我更喜欢使用 Python,但随后还需要绑定到 Python。
所以问题是:从哪里开始?实现这一目标的最佳方法是什么?我可以将所有数据记录在像 Redis 这样的密钥存储或像 Mongo 这样的基于文档的存储中。我将如何设计一项服务,允许针对大量已知的其他尝试验证具有某些功能的新尝试?并及时返回尝试是否与平均值匹配,例如 250 毫秒。