使用 CSRF 表单令牌是否有助于防止垃圾邮件?
Does using CSRF form tokens help spam prevention?
我正试图阻止机器人(可能)向我的 php 注册文件提交虚假数据。我正在创建一个使用 signup/login 系统的站点,并且我想添加我能够执行的电子邮件验证。然而,问题是我的虚拟主机每分钟只允许 x
封邮件,如果机器人发送垃圾邮件,这不仅会使我的数据库充满垃圾邮件帐户,而且我也会因违反电子邮件限制而被停职。
我一直在阅读有关保护表单的内容,然后出现了 CSRF,这是一个我不熟悉的术语。
这是我目前对CSRF防范'token method'的理解;
加载包含表单的页面时,创建一个令牌。将令牌存储在 SESSION
或 cookie 中。
当处理注册的 PHP 文件是 运行 时,它将检查令牌。如果在表单中提交的不匹配(或者如果令牌未在 SESSION
中设置),则请求是垃圾邮件。
我不明白为什么机器人不能简单地从 HTML 表单中获取令牌并提交。我明白每次都变了,难道每次都抢不到吗?
我假设机器人只会使用 CurL 或类似的东西提交数据,以绕过实际提交 HTML 表单的需要,而是直接将数据发送到 PHP 文件。
我的问题本质上是,这种方法为什么以及如何防止机器人提交我的注册表(或与此相关的任何表格)。
My question is essentially, why and how does this method prevent against bots submitting my registration form (or any form for that matter).
没有。
CSRF 代表“Cross-Site Request Forgery”,此类令牌有助于防止这种情况——用户被诱骗从 另一个 属于您的站点,与垃圾邮件无关。
为了防止垃圾邮件,您应该使用某种验证码质询。
CSRF 代表 Cross Site Request Forgery 这是 NOT 一种防止机器人提交表单的方法,这是一种防止其他浏览器选项卡将数据提交到另一个选项卡上的现有会话。
以 Facebook 为例,如果另一个选项卡只需向终点发送一个字符串即可在您的墙上提交状态更新,则大多数人总是已登录,您已经登录,因此它已获得授权并发布。
因为 CSRF 阻止选项卡执行此操作,因为他们无法从现有选项卡中收集您的令牌。令牌只需要在每个会话中生成一次并且对于每个会话都是唯一的(尽管经常更改它会使其更安全)。
您需要使用 CAPTCHA。
Does using CSRF form tokens help spam prevention?
有点,是的。不是设计使然,而是因为它使编写机器人程序所涉及的工作量略高,而且机器人程序编写者很懒惰。
I don't understand why the bot can't simply get the token from the HTML form and submit it
当然,专门针对您的注册表单编写的机器人可以做到这一点。作为无头 Web 浏览器实现的机器人将自动执行此操作,因为这是真正的浏览器会执行的操作。
您将通过拥有 CSRF 令牌来阻止的机器人是更愚蠢的机器人,它们只会将垃圾倒入每个表单操作中 URL 他们的抓取器甚至没有找到、提交和 运行 离开看看有什么反应。评论垃圾邮件发送者通常是愚蠢的。
我正试图阻止机器人(可能)向我的 php 注册文件提交虚假数据。我正在创建一个使用 signup/login 系统的站点,并且我想添加我能够执行的电子邮件验证。然而,问题是我的虚拟主机每分钟只允许 x
封邮件,如果机器人发送垃圾邮件,这不仅会使我的数据库充满垃圾邮件帐户,而且我也会因违反电子邮件限制而被停职。
我一直在阅读有关保护表单的内容,然后出现了 CSRF,这是一个我不熟悉的术语。
这是我目前对CSRF防范'token method'的理解;
加载包含表单的页面时,创建一个令牌。将令牌存储在
SESSION
或 cookie 中。当处理注册的 PHP 文件是 运行 时,它将检查令牌。如果在表单中提交的不匹配(或者如果令牌未在
SESSION
中设置),则请求是垃圾邮件。
我不明白为什么机器人不能简单地从 HTML 表单中获取令牌并提交。我明白每次都变了,难道每次都抢不到吗?
我假设机器人只会使用 CurL 或类似的东西提交数据,以绕过实际提交 HTML 表单的需要,而是直接将数据发送到 PHP 文件。
我的问题本质上是,这种方法为什么以及如何防止机器人提交我的注册表(或与此相关的任何表格)。
My question is essentially, why and how does this method prevent against bots submitting my registration form (or any form for that matter).
没有。
CSRF 代表“Cross-Site Request Forgery”,此类令牌有助于防止这种情况——用户被诱骗从 另一个 属于您的站点,与垃圾邮件无关。
为了防止垃圾邮件,您应该使用某种验证码质询。
CSRF 代表 Cross Site Request Forgery 这是 NOT 一种防止机器人提交表单的方法,这是一种防止其他浏览器选项卡将数据提交到另一个选项卡上的现有会话。
以 Facebook 为例,如果另一个选项卡只需向终点发送一个字符串即可在您的墙上提交状态更新,则大多数人总是已登录,您已经登录,因此它已获得授权并发布。
因为 CSRF 阻止选项卡执行此操作,因为他们无法从现有选项卡中收集您的令牌。令牌只需要在每个会话中生成一次并且对于每个会话都是唯一的(尽管经常更改它会使其更安全)。
您需要使用 CAPTCHA。
Does using CSRF form tokens help spam prevention?
有点,是的。不是设计使然,而是因为它使编写机器人程序所涉及的工作量略高,而且机器人程序编写者很懒惰。
I don't understand why the bot can't simply get the token from the HTML form and submit it
当然,专门针对您的注册表单编写的机器人可以做到这一点。作为无头 Web 浏览器实现的机器人将自动执行此操作,因为这是真正的浏览器会执行的操作。
您将通过拥有 CSRF 令牌来阻止的机器人是更愚蠢的机器人,它们只会将垃圾倒入每个表单操作中 URL 他们的抓取器甚至没有找到、提交和 运行 离开看看有什么反应。评论垃圾邮件发送者通常是愚蠢的。