如何保护联系表格不被滥用于群发邮件?

信息安全 应用安全 垃圾邮件 攻击向量
2021-08-29 04:15:30

联系表单的一个常见功能是不仅将联系消息发送给站点所有者,而且还发送给发送联系请求的人。有什么好的措施可以防止表单被自动脚本用作垃圾邮件工具,该脚本使用不同的电子邮件地址提交数百万次?

我可以想到几种方法,但每种方法也都有缺点或不是很有效。

  • 如今,验证码太容易被破解,对人类提交者来说是一件麻烦事。
  • 速率限制(每个 IP 每天只有 n 次提交)对分布式脚本没有帮助,并且可能会阻碍代理用户。
  • 垃圾邮件检测可能会产生误报,如果它是资源密集型的,将使该站点容易受到 DDOS 攻击。

不过,每项措施都会使攻击者更难/更耗费资源,因此他可能只会寻找其他地方。评论形式的垃圾邮件有多普遍?我需要担心吗?

3个回答

您是对的,允许任意、未经身份验证的互联网用户控制由您的网络服务(即您的网站的“联系我们”表单)发送的电子邮件的内容和收件人是一个坏主意,并且可能是垃圾邮件发送者的一个有吸引力的目标。

如果对您很重要:

  • 使用户能够指定消息的收件人;
  • 提交表格后向该收件人发送消息,

那么我建议你至少阻止用户控制消息的内容。

为什么不采用GNU Mailman在收到订阅请求时采用的那种方法呢?也就是说,首先发送一封确认电子邮件,大致如下:

您或冒充您的人使用我们网站上的联系表格提交了一条消息以供使用。这来自 [IP ADDRESS],并将您的电子邮件作为发件人的电子邮件地址。如果您提交了此申请,请点击[这里],或在保持主题行不变的情况下回复此电子邮件,以确认您提交的联系表,我们将在适当的时候阅读您的提交并回复。如果您没有通过我们的联系表格向我们发送消息,请忽略此消息。

您可以对此进行速率限制,以便它允许每(周|月|年|无论如何)向给定电子邮件地址提交不超过一次匿名提交,如果用户按照上述说明进行确认,则计时器将被重置。这将阻止喷子使用该表格来骚扰无辜的人,因为他们会收到虚假的确认信息。

在任何情况下,只有在验证联系表单的提交者可以访问所提交的电子邮件帐户后,该电子邮件帐户的用户才能看到所提交消息的内容。

请允许我根据以前的系统管理经验给出部分答案:是的,它相当普遍,您必须担心它。

听起来可能政治不正确:检查您是否可以在地理上定义您的用户群(您希望与之开展业务的人在哪里?),并通过 GeoIP 查找限制其他所有人。

AKISMET 是一个有趣的选择。就像一个垃圾邮件过滤器,但它是外包的,它结合了它从许多网站积累的知识,以更好地保护您的网站免受垃圾邮件的侵害。

虽然它主要用于保护 wordpress 评论(我用过它,但我真的不记得单个误报或垃圾邮件通过过滤器),它的 API 可用于任何其他事情:https ://akismet.com/development/

您将联系数据详细信息提交给他们的 API,他们会给您一个肯定或否定的答案。有用于报告误报和误报的 API。

当然,这里需要考虑一些隐私问题,因为它们会收到您的联系数据。但是,是一个可以考虑的选项。

另一个建议是结合你已经提到的那些:如果来自同一个IP的联系人太多,请将联系人提交给akismet进行检查。

其它你可能感兴趣的问题