PHP实现单IP限制与IP段访问控制代码
在Web开发中,有时需要基于IP地址实施访问控制,例如屏蔽恶意请求或限制特定地区访问。本文将展示如何使用PHP代码获取用户真实IP,并通过简单的字符串匹配实现对单个IP或整个IP段的拦截与重定向。
核心原理与准备
要实现IP限制,首先必须准确获取用户的IP地址。由于存在反向代理(如CDN、负载均衡器),直接读取 $_SERVER['REMOTE_ADDR'] 可能不准确。因此,标准做法是优先检查HTTP头中的 X-Forwarded-For 和 HTTP_CLIENT_IP。
在将代码应用到生产环境前,请务必备份原有文件。此外,若使用DEDECMS等特定CMS系统,建议先确认官方支持方式或联系开发者,以免覆盖原有功能。
第1步:获取用户真实IP
目的:兼容各种网络环境,获取最接近客户端的真实IP。
- 入口:脚本头部或函数内部
- 动作:依次判断环境变量和服务器变量
- 参数:
getenv('HTTP_CLIENT_IP'),getenv('HTTP_X_FORWARDED_FOR'),$_SERVER['REMOTE_ADDR'] - 完成状态:
$userip变量被赋值为字符串形式的IP地址
第2步:执行IP限制逻辑
目的:根据预设规则拦截非法访问。
可以通过两种方式限制:
- 单IP限制:精确匹配某个IP地址。
- IP段限制:通过拆分IP地址的前缀,实现如
192.168.*.*这样的网段屏蔽。
复制代码 代码如下:
<?php
// 1. 获取IP
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$userip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$userip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$userip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$userip = $_SERVER['REMOTE_ADDR'];
}
// 2. 限制单IP (示例)
if ($userip == '27.37.188.128') {
header("location:http://www.example.com/block.html"); // 被禁止后跳转到的页面
exit;
}
// 3. 限制IP段 (示例: 禁止 192.168.*.*)
$ip_arr = explode('.', $userip);
# 限制的IP段,假设是 192.168.*.*
if (!(($ip_arr[0] == '192' && $ip_arr[1]=='168'))) {
header("location:http://www.example.com/forbidden.html"); // 被禁止后跳转
exit;
} else {
header("location:https://www.example.com"); // 正常IP访问首页
exit;
}
?>
注意事项与安全建议
上述代码展示了基本的IP过滤思路。在实际应用中,请注意以下几点:
- Header欺骗风险:
X-Forwarded-For等Header可由客户端伪造。如果您的网站前端有WAF或CDN,建议在服务器配置层(如Nginx)或CDN控制台进行IP封禁,而非仅依赖PHP代码。 - IP段匹配精度:简单的字符串前缀匹配无法处理CIDR子网掩码(如
192.168.0.0/24)。对于复杂网段,建议使用专门的库或将IP转换为整数进行范围比对。 - SEO与用户体验:直接302/301重定向到“被封禁”页面可能会影响搜索引擎抓取。建议使用返回
403 Forbidden状态码,并展示友好的错误提示页面。
总结
通过PHP内置的环境变量获取机制,可以灵活地识别访问者来源。结合简单的数组操作和条件判断,能够实现基础的单IP隔离与网段过滤。虽然该方法适用于轻量级防护,但对于高流量或高安全需求的场景,推荐结合服务器端安全组件使用。
以上就是PHP实现IP段访问限制与单IP屏蔽的详细代码与指南,更多关于PHP安全防护的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









