使用CSRF表单令牌是否有助于防止垃圾邮件?

时间:2016-03-24 11:21:36

标签: forms security csrf spam-prevention

我试图阻止机器人(可能)将虚假数据提交到我的php注册文件。我正在创建一个使用注册/登录系统的网站,我想添加我能够的电子邮件验证。然而问题是我的webhost每分钟只允许x个电子邮件,如果机器人发送垃圾邮件,这不仅会使我的数据库充满垃圾邮件帐户,而且我也会因违反电子邮件限制而被暂停。

我一直在阅读有关确保表格和CSRF的内容,这是我不熟悉的术语。

这是我目前对“令牌方法”的理解。 CSRF预防;

  • 加载包含表单的页面时,创建一个令牌。将令牌存储在SESSION或Cookie中。

  • 当运行处理注册的PHP文件时,它将检查令牌。如果表单中提交的内容不匹配(或者如果代码未在SESSION中设置),请求就是垃圾邮件。

我不明白为什么机器人只能从HTML表单中获取令牌并提交它。我知道它每次都会改变,难道不是每次都抓住它吗?

我认为僵尸程序只是使用CurL或类似的东西来提交数据,以避免实际提交HTML表单的需要,而是直接将数据发送到PHP文件。

我的问题基本上是,该方法为何以及如何防止机器人提交我的注册表(或任何形式)。

3 个答案:

答案 0 :(得分:7)

  

使用CSRF表单令牌是否有助于防止垃圾邮件?

有点,是的。不是设计,而是因为它使编写机器人的工作量略高,而机器人编写者则很懒惰。

  

我不明白为什么机器人不能从HTML表单中获取令牌并提交它

当然,专门针对您的注册表单编写的机器人将会这样做。而作为无头网络浏览器实现的机器人将自动执行它,因为这是真正的浏览器所能做的。

你将通过拥有一个CSRF令牌停止的机器人是愚蠢的机器人,那些只是将垃圾扔进他们的刮刀找到,提交和逃跑的每个表单行动URL,甚至没有看到响应是什么。评论垃圾邮件发送者往往很愚蠢。

答案 1 :(得分:4)

  

我的问题基本上是,该方法为何以及如何防止机器人提交我的注册表(或任何形式)。

它没有。

CSRF代表" 跨站点请求伪造"这样的令牌有助于防止这种情况 - 用户被欺骗从另一个站点向您提交表单,这与垃圾邮件无关。

对于垃圾邮件预防,您应该使用某种CAPTCHA质询。

答案 2 :(得分:1)

CSRF代表Cross Site Request Forgery这是 NOT 一种防止机器人提交表单的方法,这是一种防止其他浏览器标签提交到另一个标签上的现有会话的方法

对于Facebook,大多数人总是登录,如果另一个标签只是通过向终点发送字符串就可以在您的墙上提交状态更新,您已经登录,以便获得授权和发布。

CSRF会阻止标签执行此操作,因为他们无法从现有标签中收集您的标记。令牌只需要在每个会话中生成一次,并且对于每个会话都是唯一的(尽管经常更改它会使其更安全)。

您需要使用CAPTCHA