
PHP 写了个页面,如果访问来自私有 IP 地址就允许。家里的 ip 是 192.168.1.0/24 网段的。今天发现一个漏洞,在朋友家访问我这个页面,居然可以打开。查看 ip 发现是 10.15.25.81 。
我知道只要改成 192.168.0.0/16 网段就可以了,但是也不能保证运营商分配 192.168.0.0/16 给其他用户,虽然大概率不太可能大内网用 C 类私有地址。
&t;?php if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } $ip = $_SERVER["REMOTE_ADDR"]; //local access OR from my IP(through Cloudflare) if ( (!(filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE)))//check local ip || ($ip == gethostbyname('my.ddns.me'))//check public ip ) { //do nothing; } else{ //go error page echo "No access"; ?> 1 opengps 2023-04-27 09:13:31 +08:00 这里似乎有个伪需求,如果仅允许私有地址打开,何必暴露端口到公网呢? |
2 doveyoung 2023-04-27 09:39:40 +08:00 你杀死了比赛 |
3 911061873 2023-04-27 11:23:16 +08:00 都是内网的服务了,直接从网络层面就可以拒绝外网访问的问题,不把服务暴露在公网不就好了? |
4 laozhoubuluo 2023-04-27 14:29:22 +08:00 因为有时候会通过 XFF 等第三方头透传内网 IP 导致出问题,最省事的改法应该是去掉 HTTP_CF_CONNECTING_IP 可以覆盖 REMOTE_ADDR 的逻辑,只信任底层上报的 IP 地址即 REMOTE_ADDR 。 |
5 busier 2023-05-01 14:42:07 +08:00 楼上讲明了原因! 但是 1 楼才是最优解! |