关于修改 HTTP 请求头问题

2016-01-08 08:45:02 +08:00
 lycos

通过手动修改 HTTP 请求头的方式可以轻易骗过服务器,达到所谓的“伪造”客户端 IP 地址的目的,这招并非对于所有的网站有效(这取决于服务器获取 ClientIP 的方式)。
问题,如何避免访问网站的服务器端获取到本地真实 ip 呢?

6377 次点击
所在节点    问与答
46 条回复
Havee
2016-01-08 10:55:31 +08:00
有些服务上了 cdn ,来路就基本都是那些 cdn 节点了
这个时候读 http head 省事
Shieffan
2016-01-08 11:01:10 +08:00
挂代理、 VPN



或者你修改本机 IP ,然后修改从本机 IP 到目标主机的所有路由设备的路由信息,以便它们能给你寻路,嗯,上帝模式。
lycos
2016-01-08 11:02:57 +08:00
@mcfog 服务端不是我控制的
lycos
2016-01-08 11:11:25 +08:00
@Shieffan 修改了本机 ip 不可行的
gamexg
2016-01-08 11:34:08 +08:00
tcp 协议设计之初就考虑到会有楼主这种伪装 ip 的攻击,设计时就封堵的差不多了。
后期一些容易操作的有问题的设计(例如源端路由)也都被纠正了。

另外一些就是运营商才能做到的了。
Strikeactor
2016-01-08 11:36:29 +08:00
乖乖挂代理吧,这事你不是运营商就别想了
jin5354
2016-01-08 11:55:03 +08:00
各种代理和 VPN 就是专门做这个的。憋寻思别的了
lycos
2016-01-08 11:56:30 +08:00
@jin5354 恩恩 这个问题问的有点白痴了。。 基本是不可能做到的
lycos
2016-01-08 11:57:18 +08:00
@Strikeactor 我当时是抱着等待高手的出现 看看高手有何高见的 。。现在看来是基本不可能了
TheCure
2016-01-08 12:38:20 +08:00
我来替 lz 总结一下

我是 lz
我的问题是白痴
你们回到不出我的问题,你们都不是高手

哈哈
lycos
2016-01-08 12:41:48 +08:00
@callofmx haha.... 大家回答的都很专业 只是我不专业..
just1
2016-01-08 13:02:47 +08:00
REMOTE_ADDR 是无法伪造的
当使用了 cdn , REMOTE_ADDR 是 cdn 的 ip 。
但是 cdn 一般会传回一个客户的真实 ip 在 header 里。
比如 cf:HTTP_CF_CONNECTING_IP 就是 cdn 接受到的 remote_addr(也就是客户的真实 ip)。
所以隐藏是不太可能的。
但可以这样:穿透 cdn 找到源站 ip(虽然不容易,却也不是没办法), hosts 指向。在每次请求头加入"HTTP_CF_CONNECTING_IP",当然如果对方限制了仅 cdnip 可访问那就没办法了。
但是,这是根据程序逻辑来的,有的网站只获取 xff 并不校验,那修改 xff 就够了,同理 clientip 也是这样。
Cloudee
2016-01-08 13:02:58 +08:00
可以认为是不可能的

简单理解的话,就是服务器总是要知道你的 IP 来发回复的信息的,所以这个用于发送返回信息的 IP 服务器肯定有办法知道,如果你骗过这个的话,服务器的回复也回复不到你这里了

而因为 TCP 握手是要交互几次的,因此也不存在你把请求丢过去不管返回的情况
mornlight
2016-01-08 13:10:48 +08:00
楼主你可以逆向思维一下,如果可以仅在客户端伪造来源 ip 的话,那防火墙的 ip 过滤规则还有什么用?

按目前的协议设计,想要用假 ip 又正常通信,是不可能的。

所谓的改请求头的方式,只是针对非匿名代理或者 CDN 这种(会自动在 HTTP 头里标明请求的源 ip )。很多网站后端取 ip 时会优先拿请求头里的源 ip 。
mengzhuo
2016-01-08 13:27:27 +08:00
@mornlight
@Cloudee

各种 sock_proxy 、 http_proxy 不就是改 IP 源么?
Cloudee
2016-01-08 13:31:56 +08:00
@mengzhuo 那是代理服务器做了中转。比如网站 B 和代理服务器 A ,你连 A , A 连 B ,对于你来说你只跟 A 交互,对于 B 来说, A 才是自己的客户。
并不是你的数据包直接用 A 的 IP 发过去了,而你你把数据包发给 A , A 把数据包原样用自己的 IP 发给 B 了。这个时候 B 回复是回复给 A 的,并不直接回复给你。
lycos
2016-01-08 13:39:54 +08:00
@Cloudee 所以这个过程是服务端既获取到 A 的 ip , 又识别了数据包头的源 ip
jasontse
2016-01-08 13:40:54 +08:00
客户端 A: 你好我是客户端 B 。
服务器 A: 欢迎你,客户端 B 。
客户端 B: 莫名其妙,谁找我?
客户端 A: 尼玛! 服务器 A 不理我(其实招呼打到客户端 B 去了)。。。。
mengzhuo
2016-01-08 16:38:15 +08:00
@Cloudee

对啊,不就是这么个意思吗?
Cloudee
2016-01-08 17:12:52 +08:00
@mengzhuo 但是你要有可用的代理,并且代理是知道你的 ip 的,因此你还要代理不通过 http 头泄露你的真实 ip

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

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

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

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

© 2021 V2EX