asp .net 页面是否有其他方法可以在不使用验证码的情况下识别机器人?

Are there other ways for an asp .net page to identify bots without using captchas?

我一直看到网页使用验证码来做这个,但我想知道是否有其他方法...

还有其他方法,例如:

(1) 记录表单显示和提交的时间,检查表单是否提交得太快。

(2)蜜罐:创建一个不可见的文本字段。提交时检查它是否未填写,因为机器人可能会用值填充所有字段,但人类不会填写它。

(3) 使用客户端 JavaScript 生成一个复选框并告诉人们他们需要检查它。机器人可能无法处理 JavaScript,因此可能无法检查它。

(4) 为确保只有在实际显示表单时才能提交表单(机器人可能只是 post 提交的表单值而不先请求表单),创建并存储会话令牌当显示表单时,然后在提交时检查它是否存在。确保在使用会话令牌后将其删除以防止重复使用。

下面是一些结合了 (1) 和 (4) 的 C# 示例代码。

//When form is displayed
Guid token = Guid.NewGuid();
Session["token_" + token.ToString()] = DateTime.Now;
hdnToken.Value = token.ToString();

//When form is submitted
string token = hdnToken.Value;
book valid = false;
If (Session["token_" + token] != null)
{
    DateTime displayed = DateTime.Parse(Session["token_" + token]);
    //form must not be submitted within 30 seconds
    valid = displayed < DateTime.Now.AddSeconds(-30);
    Session.Remove("token_" + token);
}