使用会话防止表单垃圾邮件

时间:2009-05-05 16:10:38

标签: java session struts spam-prevention

我已经阅读了大多数有关防止表单垃圾邮件技术的问题,但似乎没有人建议使用浏览器的会话。

我们有一个表单可以发送电子邮件到指定的电子邮件地址,我们不喜欢使用“验证码”或Javascript的想法,因为我们希望保持用户旅程简单,无需Javascript即可访问。

我们希望使用会话对象来帮助防止表单垃圾邮件。我们的webapp是使用Struts在Weblogic Server 10上开发的。

解决方案是,当表单加载时,它会在会话对象中设置一个变量。单击“提交”后,我们将检查变量的会话。没有变量,重定向到表单。变量存在发送电子邮件。

我真的很感激为什么这可能是一个坏主意的任何意见/原因,所以我们可以针对其他人评估这个解决方案。

非常感谢, 乔纳森

4 个答案:

答案 0 :(得分:1)

没有什么可以阻止垃圾邮件发送者自动下载表单(从而生成cookie)并提交表单的过程。它可能给垃圾邮件发送者带来轻微的负担,但这是一个微不足道的负担。

例如,使用命令行工具(如cURL)可以轻松下载和提交表单,并保留cookie。然后可以反复从脚本运行它。

答案 1 :(得分:0)

根据实现,会话对象在资源使用方面可能相对较重,也有些慢。此外,垃圾邮件发送者,如果他们意识到您是如何阻止他们的,那么每次他们点击表单时都可以通过不发回会话cookie来开始新的会话。

因此,因为该技术依赖于客户端表现良好,并且预期的行为相当容易预防,所以它可能没有其他一些方法来解决问题。

答案 2 :(得分:0)

感谢您回复cdeszaq,但我不确定您是否误解了我的问题。

要成功完成表单提交,将强制客户端加载表单以正确设置会话对象。只有当会话处于正确状态时,才能发送电子邮件。

如果垃圾邮件制造者没有发回会话cookie,那么他们将无法发送垃圾表格,因为他们没有进入我创建正确会话的表单页面。

我同意使用会话对象会创建额外的资源。我们的实现很简单,(使用JSP)调用session.setAttribute("formLoaded", true);,在我的Struts操作中,我只需使用session.getAttribute("formLoaded");进行检查。

答案 3 :(得分:0)

我想知道这是否可行:

  1. 每次渲染页面/表单时,都要创建一个随机的文本
  2. 将该文字放入会话
  3. 将该文字包含在
  4. 形式的隐藏字段中
  5. 用户提交表单
  6. 操作会将隐藏文本与会话中的值进行比较 - 如果匹配,请发送电子邮件
  7. 由于黑客无法在会话中添加任何随机值,因此他们无法发送垃圾邮件。正确?