网站上检测到奇怪的注册模式

3

我上周推出了我的第一个网络应用程序(后端使用node/express,在Heroku服务器上运行),但是在日志中已经看到了一些奇怪的注册行为。

起初我以为这是真正的用户,但它已经发生了足够多次并且有着相同的模式,因此可以明显地判断这是某种垃圾邮件机器人。

我的网站包含一个注册表单,需要提供firstnamelastnameemailpassword1password2(必须匹配)。提交表单后,用户必须再点击一个按钮来选择他们想要注册的帐户类型,并向提供的电子邮件发送验证邮件。

在过去的几天里,我已经有了大约10个可疑的注册,浏览模式如下(以下是昨晚的两个例子):

timestamp    page

04:48:45    viewBlogPage
04:48:47    registerUser
[ Send email for user to verify ]
04:48:54    sendResetToken
04:48:56    sendResetToken
04:48:58    getBlogPost
04:49:10    getBlogPost
04:49:12    getBlogPost
04:49:15    getBlogPost
04:49:15    getBlogPost

22:22:32    viewBlogPage
22:22:32    registerUser
[ Send email for user to verify ]
22:22:38    sendResetToken
22:22:39    sendResetToken
22:22:40    getBlogPost
22:22:41    getBlogPost
22:22:42    getBlogPost
22:22:42    getBlogPost
22:22:43    getBlogPost

在每种情况下,用户都必须执行以下操作:
  1. 导航到主要的博客页面(包含博客文章列表)
  2. 导航到注册页面,输入有效的表单数据并提交表单。在每种情况下,firstnamelastname都是无意义的,似乎是随机字符字符串(例如firstname: 'Iluuxpmv',lastname:'Yrtkaugn'firstname: 'Qatocgyp',lastname:'Hdfurawghgkqs'
  3. 发送了一封未经验证的电子邮件
  4. 用户然后导航到登录页面,并尝试在短时间内两次重置密码
  5. 用户然后导航到一个特定的博客文章五次

我的第一个问题是我该如何阻止这种行为

但更广泛的是,我对为什么这些(可能是)机器人以这种奇怪的方式浏览我的网站感兴趣。

如果这是垃圾邮件机器人,那么它只发生了大约10次,而且他们点击的是不包含表单的非随机页面,这似乎很奇怪。

是否有一些解释可以帮助我防止这种情况的发生?


4
可以在登录时添加验证码或要求做一些数学计算来增强安全性。 - brk
2
防止它的目的是什么? - Reinstate Monica Cellio
1
@brk - 如果那是最好的方法,那我想我可以研究一下,但对我来说,这似乎总是一个糟糕的用户体验! - fugu
2
很遗憾,对于使用真实电子邮件地址的虚假注册,您无能为力,但这种情况不太可能发生得太频繁。至于数据库,只需删除未在一两天内进行验证的注册用户即可。每天执行一次(使用定时任务),就可以将垃圾数据从数据库中清除。还有其他方法可以减少噪音,但没有办法完全停止它。您是否保留每个注册的IP地址? - Reinstate Monica Cellio
1
@Archer - 为什么这种情况不太可能经常发生? - fugu
显示剩余10条评论
1个回答

2
如果问题是“如何停止这个?”,那么答案是你可能无法完全停止它,但你可以增加一些额外的安全或验证。理想情况下,在服务器端添加安全措施,因为这很强有力地证明了安全实际上发生在那里。验证也可以在客户端进行,但只是因为它可以更容易地被取消或绕过。
一些快速的胜利可以是 -
白名单而不是黑名单
不要坐在那里通过一些条件来工作,以便您的验证应该捕获错误。这将非常快速地过时,你将不得不更新它。即不要列出某些值或条件的黑名单,然后未被捕获的所有其他值都被传递。
相反,白名单 - 提供一组条件,通过这些条件进行验证。然后不符合这些条件的所有内容都会失败,并且不会提交。这使得您的应用程序始终允许您已确保允许的内容,并且所有其他变化的输入/绕过技术都会失败。
在您的注册页面上添加计时器
正常用户至少需要几秒钟来输入他们的详细信息并选择一个合适的密码等 - 而机器人则不会。机器人将立即执行脚本。这意味着您可以实现一个计时器,并在提交表单时检查计时器是否少于3秒左右。如果是,请阻止提交并重定向用户。
重命名您的电子邮件字段并误导
您可以有两个电子邮件字段,但其中一个是隐藏的。
<input type="hidden" value="" name="email" id="email" placeholder="Enter your email..."> 
<input type="email" value="" name="eee" id="eee" placeholder="Enter your email...">

一个机器人将搜索任何字段并尝试输入有效的输入以成功提交。因此,机器人将找到现在虚假的隐藏字段“电子邮件”并填写它,但是普通用户不应该能够看到该字段。因此,在表单提交时,只需检查隐藏字段是否有任何值,而不是空字符串。
确保没有任何输入相等
许多垃圾邮件机器人只是将相同的值输入到每个输入中。尽管在您给出的示例中似乎不是这种情况,但这是经常发生的情况。他们可能会为名字、姓氏、电子邮件和密码输入“iamafakebot@fakeemail.com”,假设这将允许根据其预期的字段成功提交。
因此,您可以比较提交的值,如果它们彼此相等,则无法提交表单,甚至可以提供可读取的用户消息。
结论
这可能无法完全解决您的问题,因为安全是一个庞大的主题,具有许多不同的观点和不断更新的条件,但是,这些措施至少会为您的应用程序增加一些额外的安全性。
希望其中一个适用于您的情况,并且您开始在系统中看到更少的机器人。

谢谢。这里有一些有用的想法。我已经考虑过重命名电子邮件字段,我想这是我将要尝试的第一件事情。时间安排似乎存在风险,因为真正的用户可能会使用自动完成,这可能会根据时间触发反机器人防御。 - fugu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接