IPv6是否有助于防止表单垃圾邮件?

5
开发 Web 应用程序的一个重要部分是使其免受滥用,更具体地说是防止垃圾邮件。最近我注意到,今天的垃圾邮件机器人能够请求表单、填写表单并提交表单(例如,在 CMS 实际接受表单数据之前,CMS 还会要求提供更多信息),而且所有这些都来自不同的 IPv4 地址。首先,有两个问题:
他们使用了哪些技术来将属于同一会话(表单提交)的不同请求通过不同的 IP 路由,而且所有这些在几秒钟内完成?
我可以编写基于 IP 的哈希函数来检查请求表单和提交表单的 IP 是否相同,但是:是否存在合法的原因,用户(即非垃圾邮件发送者)可能希望从请求表单的 IP 不同的 IP 提交表单?
然后,进入这个问题的实质:
随着 IPv6 拥有几乎无限的地址数量,垃圾邮件发送者会更容易让网站管理员和 Web 应用程序开发人员感到痛苦吗?也许最终用户都会拥有自己的静态 IPv6,这对我们来说是好事,因为我们可以更容易地阻止机器被攻击的用户。
或者,垃圾邮件发送者可以继续从不同的角度攻击我们,永远不会使用相同的 IPv6…我对它如何技术上工作并不太确定,特别是因为我甚至不理解在 IPv4 中它是如何工作的。
问题几乎是在 IPv4 地址耗尽的那一天提出的。

这个问题的目的是确保我刚开始开发的Web应用程序已经准备好处理IPv6垃圾邮件,同时也能处理IPv4垃圾邮件。 - augustin
4个回答

4
简短的回答是,IPv6可能使阻止垃圾邮件更容易,而不是更加困难。具体来说,虽然IPv6允许主机通过无限数量的RFC 4941隐私地址循环连接到您的Web应用程序,但好消息是,他们地址的64位网络标识符部分可以相当合理地映射到一个相对静态的用户标识符。另一方面,继续使用IPv4将很快开始变得相当严峻。随着越来越多的互联网服务提供商通过大规模NAT网关聚合订户来处理IPv4地址枯竭问题,您将失去将订户视为在其IPv4地址中具有唯一标识符的能力。在某些时候,垃圾邮件制造者将利用此功能对抗您,您的选择将是切断通过NAT网关进入的大量无辜的IPv4用户,其中许多被攻击的主机所在,或者在事后更好地检测和删除垃圾邮件。

2

一些用户可能会使用静态IPv6地址进行http请求,而其他用户则不会。

看看我正在发布的机器的主要接口上的一些IPv6地址:

C:\>netsh interface ipv6 show address interface=4 level=normal
Querying active state...


Interface 4: Local Area Connection

Addr Type  DAD State  Valid Life   Pref. Life   Address
---------  ---------- ------------ ------------ -----------------------------
[...]
Temporary  Preferred     23h59m47s     3h59m47s 2001:4830:16c0:0:f51c:8f47:26ff:596b
Temporary  Deprecated    23h59m47s           0s 2001:4830:16c0:0:8d09:1a8:6039:548b
Temporary  Deprecated    23h59m47s           0s 2001:4830:16c0:0:954b:fd2d:6528:a6b2
Temporary  Deprecated    23h59m47s           0s 2001:4830:16c0:0:4c27:9415:e1cc:5a5a
Temporary  Deprecated    23h59m47s           0s 2001:4830:16c0:0:951f:b93:b21e:1d97
Temporary  Deprecated    23h59m47s           0s 2001:4830:16c0:0:59c3:d575:189e:4fbb
Temporary  Deprecated     6h32m45s           0s 2001:4830:16c0:0:f838:1133:38d0:894c
Public     Preferred     23h59m47s     3h59m47s 2001:4830:16c0:0:20b:dbff:fe26:9fc5
Link       Preferred      infinite     infinite fe80::20b:dbff:fe26:9fc5
No entries were found.

我省略了一些其他的地址,这些地址只会让人更加困惑。

请注意,除了“Link”地址之外,还有一个“Public”地址和一堆“Temporary”地址(其中大多数是“已弃用”的)。

“Link”地址只是接口的本地链接地址,用于各种本地管理通信。 (顾名思义,它只能用于与同一“链路”上的其他主机通信;它不能用于需要路由的流量中。)

naesten@hydrogen:~% ipv6calc -i fe80::20b:dbff:fe26:9fc5 2>/dev/null
Address type: unicast, link-local
Registry for address: reserved
Interface identifier: 020b:dbff:fe26:9fc5
EUI-48/MAC address: 00:0b:db:26:9f:c5
MAC is a global unique one
MAC is an unicast one
OUI is: Dell ESG PCBA Test

正如您所看到的,该地址的接口标识符(右侧64位)直接基于接口的MAC地址

其他显示的地址恰好来自我提供的sixxs子网2001:4830:16c0::/48,但不幸的是它们现在无法使用,因为POD已经关闭。

"Public"地址只需将前缀与链路本地地址中相同的接口标识符连接在一起,这应该不足为奇(考虑到名称),因为这是服务器和长时间运行的点对点程序通常侦听的地址。

那么这些"Temporary"地址呢?

现在是令人困惑的部分:所有这些其他地址是什么,它们从哪里来?

答案可以在RFC 4941 - IPv6无状态地址自动配置的隐私扩展中找到。你看,事实证明,在你的IP地址中永久使用相同的接口标识符使得对手“关联看似无关的活动”变得非常容易(省去了“跟踪cookie”的需要,并允许以后独立收集的数据进行组合)。

解决方案是为大多数通信使用临时IPv6地址。在任何给定时间,其中一个是“首选”地址,用于新的通信,其他一些地址是“有效”的但不是“首选”的,因此当到达切换到新的“首选”地址的时候,正在进行的通信不会受到不必要的干扰。没有地址保持“首选”或“有效”的时间超过TEMP_VALID_LIFETIMETEMP_PREFERRED_LIFETIME

特别是,第5节建立了以下默认值,这显然与我们在这里看到的一致:

TEMP_VALID_LIFETIME -- Default value: 1 week.  Users should be able
to override the default value.

TEMP_PREFERRED_LIFETIME -- Default value: 1 day.  Users should be
able to override the default value.

2

由于网络拓扑结构的变化,例如笔记本电脑从火车站的Wi-Fi服务断开连接并连接到列车上的Wi-Fi服务,IP地址可能在填写表单时发生更改。多宿主机可能会随机更改源地址或响应路由协议而更改源地址。


1
如果您将滥用与/64前缀长度的掩码匹配,即忽略地址的主机部分,则有很大的可能性从单个主机中挫败基本攻击。如果您想要处理具有更多地址空间访问权限的攻击者(例如/56或/48),那么您也可以处理它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接