对于会话劫持进行“松散”IP检查的最佳方法是什么,这对于IPv4和IPv6都有效?我有一个数组,它保存所有用户的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,但是怎么做呢?
答案 0 :(得分: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的网络掩码。