PHP实现单IP限制与IP段访问控制代码

晚来风
晚来风
发布时间:2026-10-15| 3人浏览过
原创

在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限制逻辑

目的:根据预设规则拦截非法访问。

可以通过两种方式限制:

  1. 单IP限制:精确匹配某个IP地址。
  2. 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安全防护的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。