我正在编写一个ASP.NET MVC应用程序,它使用Membership数据库来存储用户注册。我使用电子邮件地址作为用户名。当用户在我的应用程序中注册时,我会向注册时使用的地址发送电子邮件确认。即我发送一封包含用户应该点击的链接的电子邮件,以验证该地址属于他。
在点击该链接之前,该帐户仍然是“未经证实的”#39; (即EmailConfirmed列等于False)。这意味着,帐户已创建,但尚未激活。
如何处理蛮力创建帐户的黑客?我在这里看到两个大问题:
至于2)我看到了几个选项:
1)怎么样?如何保护自己免受批量创建帐户的影响?除了使用代码限制每个IP每天1个帐户。
答案 0 :(得分:0)
处理这类问题的一种简单方法是粗略但有效。
我通常会在表单中添加一个不属于我需要的字段的附加字段 - 但是有一个合法的名字,如“公司” - 然后我使用CSS将其隐藏在屏幕视图中。真实用户永远不会在屏幕上看到这个,但是浏览HTML的机器人会找到它。
然后,在提交表单时,首先我检查该表单字段是否有值。如果它有 - 我停止页面执行任何进一步或只是返回HTTP错误,因为99.9%的时间只有机器人会填写该字段 - 而不是真正的用户。
//anti-bot measure
if (!String.IsNullOrEmpty(Company.Text))
{
HttpContext.Current.Response.StatusCode = 400;
HttpContext.Current.Response.Status = "400 Bad Request";
HttpContext.Current.Response.End();
}
//carry on processing the form...
我已经在表格上使用这种技术已经有好几年了,而且非常有效!