PHP 写了个页面,如果访问来自私有 IP 地址就允许

2023-04-27 02:43:10 +08:00
 serafin

PHP 写了个页面,如果访问来自私有 IP 地址就允许。家里的 ip 是 192.168.1.0/24 网段的。今天发现一个漏洞,在朋友家访问我这个页面,居然可以打开。查看 ip 发现是 10.15.25.81 。

我知道只要改成 192.168.0.0/16 网段就可以了,但是也不能保证运营商分配 192.168.0.0/16 给其他用户,虽然大概率不太可能大内网用 C 类私有地址。

<?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";
?>
1496 次点击
所在节点    宽带症候群
5 条回复
opengps
2023-04-27 09:13:31 +08:00
这里似乎有个伪需求,如果仅允许私有地址打开,何必暴露端口到公网呢?
doveyoung
2023-04-27 09:39:40 +08:00
你杀死了比赛
911061873
2023-04-27 11:23:16 +08:00
都是内网的服务了,直接从网络层面就可以拒绝外网访问的问题,不把服务暴露在公网不就好了?
laozhoubuluo
2023-04-27 14:29:22 +08:00
因为有时候会通过 XFF 等第三方头透传内网 IP 导致出问题,最省事的改法应该是去掉 HTTP_CF_CONNECTING_IP 可以覆盖 REMOTE_ADDR 的逻辑,只信任底层上报的 IP 地址即 REMOTE_ADDR 。
busier
2023-05-01 14:42:07 +08:00
楼上讲明了原因!
但是 1 楼才是最优解!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/935784

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX