ASP.NET/Mono MVC2电子商店包含注册表格,要求提供两次强制性客户姓名,地址,电话密码以及一些可选字段。
是否应该添加垃圾邮件保护? 表单验证密码和“重复密码”字段是否相同。 这足以防止垃圾邮件吗?
如果不是最合理的方式添加这种保护?像
这样的东西jquery和jquery ui用于客户端。
答案 0 :(得分:3)
防伪代币是第一步。没有理由不在每种形式上使用它们,所以只要养成习惯。他们的工作方式是,当用户登陆您的GET操作时,会创建一个令牌并将其设置为表单中的隐藏字段或cookie或两者。发布表单时,POST操作会检查它是否等于在GET操作上设置的令牌。如果发布的值和原始值匹配,则正常处理请求。这意味着某些第三方不能简单地将数据直接发布到您的POST操作中。他们必须首先加载GET操作,获取防伪令牌,然后使用它进行POST。这只是一个额外的步骤,但在诸如垃圾邮件和网络钓鱼之类的游戏中,它更多地是关于数量而不是有效性,它至少会减慢它们的速度。他们现在必须自定义为您的网站自定义内容,而不是可能适用于一系列网址和网站的脚本。如果你是Facebook,他们会这样做。如果这是你的个人博客,他们可能不会浪费时间。这一切都取决于他们的动机以及他们对您网站的看法。
另一种相对有效的技术称为蜜罐。基本上,你在表单中添加了一些通常很重要的字段,但是对于有问题的表单而言并不重要 - 像“email”,“name”等字段。选择一个当前表单没有的字段使用,无论如何包括它,然后用CSS或JS隐藏它。 (请记住,您需要明显地隐藏它,不将其设置为display:none
。display:none
的字段未发布,因此它打败目的 - 你希望它被发布。只需设置如下:
position:absolute;
width:0; height:0;
overflow:hidden;
无论如何,如果垃圾邮件发送者只是随机定位网站,他们的脚本会追踪您的蜜罐,如果他们填写,你知道它是垃圾邮件发送者,所以你只是扔掉那个帖子。另外,请记住,要使此技术有效,您必须假装它有效。所以,即使你实际上在幕后扔掉了帖子,你仍然表现得像是一个成功的请求。如果你返回一些错误或完全失败,如403 Forbidden,他们会明智地做你正在做的事情。
我想说,只有上面提到的前两个建议不能起到防止垃圾邮件的作用,你才应该考虑使用CAPTCHA。它们具有极大的可用性缺陷,用户以与太阳火相等的激情来憎恨它们。不要从一开始就过火。根据您站点的名声大小,单独使用防伪程序令牌可能会完成这项任务。如果没有,蜜罐可能会等等。对于很多人来说,只要彻底吃掉猪肉并在所有东西上拍下CAPTCHA,否则,垃圾邮件的可能性最小。
答案 1 :(得分:1)
我的经验是,验证码足以防止垃圾邮件。