1

对 IPv4 和 IPv6 都适用的“松散”IP 检查以防止会话劫持的最佳方法是什么?我得到了一个数组,它保存了所有用户的 IP 地址以及用户从该地址连接的次数:

$arr = array(ip_address => connected_times, ...);

现在我是否想做松散的 IP 检查并将其与 $_SERVER['REMOTE_ADDR'] 进行比较。如果用户只从 1 个地址连接,它是否应该假定会话 id 已被劫持。同时,如果用户定期从 82.34.24.* 更改 IP 地址到 82.34.24.* 应该假设一切正常,但如果用户突然从 82.34.33.0 或某个不属于的地址连接如果假设会话劫持,相同的 IP 组地址或以前从未使用过(例如最后 20 个请求)。

实现这一点的最佳方法是什么,使用inet_pton/inet_nton,但是如何呢?

4

1 回答 1

1

您可以比较网络掩码。它会是这样的:

$new_ip = '82.34.24.128';
$old_ip = '82.34.25.1';

$old = inet_pton($old_ip);
$new = inet_pton($new_ipd);

if (($num & 0xFFFFFF00) == ($old & 0xFFFFFF00)) {
   ... identical /24 
} else {
   ... hijacked?
}

当然,这假定用户来自的任何网络都是 /24(旧式 C 类)子网。如果它是一个更大的网络,比如 IBM 的某个人,它有一个 /8(旧式 A 类),这将失败,在这种情况下,您需要一个 0xFF000000 的网络掩码。

于 2011-07-05T15:49:13.097 回答