-1

ASP.NET/Mono MVC2 E-shop 包含注册表,要求输入必填的客户姓名、地址、电话密码两次和一些可选字段。

是否应该在表单中添加垃圾邮件保护?表单验证密码和“重复密码”字段是否相同。这足以防止垃圾邮件吗?

如果不是,添加这种保护的最合理方法是什么?就像是

  • 防伪令牌
  • 向现有数据添加更多验证(如何)
  • 添加额外的输入(验证码)

jquery 和 jquery ui 用于客户端。

4

2 回答 2

4

防伪令牌是很好的第一步。真的没有理由不在每个表单上都使用它们,所以让它成为一种习惯。它们的工作方式是,当用户登陆您的 GET 操作时,会创建一个令牌并将其设置为表单中的隐藏字段或 cookie,或两者兼而有之。发布表单时,POST 操作会检查它是否等于在 GET 操作上设置的令牌。如果发布的值与原始值匹配,则正常处理请求。这意味着某些第三方不能简单地将数据直接发布到您的 POST 操作。他们必须首先加载 GET 操作,获取防伪令牌,然后使用该令牌进行 POST。这只是一个额外的步骤,但在垃圾邮件和网络钓鱼等游戏中,它更多的是关于数量而不是有效性,它至少会减慢它们的速度。他们现在必须为您的站点自定义编写一些东西,而不是可能适用于一系列 URL 和站点的脚本。如果你是 Facebook,他们会这样做。如果这是您的个人博客,他们可能不会浪费时间。这完全取决于他们的动机以及他们认为您的网站的价值。

另一种相对有效的技术称为蜜罐。基本上,您在表单中添加了一些通常很重要的字段,但对于相关表单而言并不重要 - 诸如“电子邮件”、“姓名”等字段。选择一个您当前表单没有的字段不要使用,无论如何都包含它,然后用 CSS 或 JS 隐藏它。(请记住,尽管您需要明显地隐藏它,而不是将其设置为display:none。未发布的字段display:none,因此它违背了目的 - 您希望它被发布。只需设置如下:

position:absolute;
width:0; height:0;
overflow:hidden; 

无论如何,如果垃圾邮件发送者只是随机定位网站,他们的脚本会追踪你的蜜罐,如果他们填写,你就知道它是垃圾邮件发送者,所以你扔掉那个帖子。另外,请记住,要使这种技术有效,您必须假装它有效。所以,即使你实际上是在幕后把帖子扔掉,你仍然表现得好像这是一个成功的请求。如果您返回一些错误或因 403 Forbidden 之类的完全失败,他们会明白您在做什么。

我想说,只有当上面的前两个建议不能防止垃圾邮件时,你才应该考虑使用 CAPTCHA。它们在可用性方面存在极大缺陷,用户对它们的恨意与烈日之火一样。不要从一开始就过火。根据您网站的知名度大小,单独的防伪令牌实际上可以完成这项工作。如果没有,蜜罐可能会,等等。对于许多人来说,只是一头扎进所有东西上,然后在所有东西上打一个验证码,当更有可能时,垃圾邮件充其量是最少的。

于 2013-02-21T15:46:19.957 回答
1

我的经验是验证码足以防止垃圾邮件。

于 2013-02-21T15:05:19.330 回答