如何在指定网页上拦截localhost本地IP访问?
本地回环IP拦截方案(PHP)
原有代码问题说明
- 直接使用
==判断IP段是无效的,该运算符只能做精确字符串匹配,无法识别127.0.0.1-127.0.0.9这种范围写法 - 没有覆盖IPv6的本地回环地址
::1,本地通过IPv6访问localhost时不会被识别到 - 部分本地环境下域名解析的localhost对应的IP可能不在你写的127.0.0.1~9范围内,也会导致拦截失效
可用实现代码
// 定义固定本地回环IP列表,可按需扩展 $local_ips = [ '127.0.0.1', '::1' ]; // 匹配127.0.0.1-127.0.0.9段IP的场景,用ip2long转换为数值后做范围判断 $ip_long = ip2long($_SERVER['REMOTE_ADDR']); if (in_array($_SERVER['REMOTE_ADDR'], $local_ips) || ($ip_long >= ip2long('127.0.0.1') && $ip_long <= ip2long('127.0.0.9'))) { die('访问被拦截'); }
特殊场景适配
如果你的服务部署在反向代理后面,$_SERVER['REMOTE_ADDR']会拿到代理服务器的IP而非真实客户端IP,需要先调整取值逻辑,从代理传递的X-Forwarded-For等请求头里取真实IP,再做拦截判断。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

