炫意html5
最早CSS3和HTML5移动技术网站之一

访问网站的ip到底能不能仿造?

RT。
若能仿造,请问如何仿造。
若不能仿造,请问原因(原理)是什么?

最近网站需要做一个安全验证,用ip地址来限制用户访问接口的次数,于是想到这个问题。
求解答。

回答

可以伪造.

一般请求经过代理或者 CDN 之后,代理服务器会把用户的 ip 放在 x-forwarded-for 这个http 头里,经过多级代理之后,这个字段里会有多个 IP. 这个头你可以用程序模拟自己发送,这样就导致了这个头实际上是不可信任的. 你也可以和 CDN 约定使用特殊的 http 头来返回用户IP.但由于这个头不可信,会导致 cdn 做出两种选择,一种是把这x-forwarded-for里的第一个 IP 作用用户的正式 IP 带给你,另一种就是完全不信任这个x-forwarded-for,直接把这个 tcp 连接的对端 IP 作为用户 IP 带给你,但实际上,他也不知道这个 tcp 连接的对端,到底是用户还是一个代理服务器.
如果使用 x-forwarded-for 你自己发送一个头就可以绕过了.如果是第二种,虽然无法伪造,但是可能因为对端是一个运营商代理导致你一下子拦截住了一堆人..

一般情况,开发接口不做限制,需要用户登录或者 oauth 认证的接口,直接对用户 id 或者 appid 做请求限制即可.限制 IP 问题太多,你只能取舍,要么信任 cdn取 cdn 带来的用户 IP,要么不信任 cdn,直接取 remote_addr

肯定可以,请求的时候设置代理Ip就可以了吧,设置后服务器能不能识别原始IP需要看代理IP的透明度,但现在很多代理商要添加白名单,所有从代理商是肯定可以看到的。

炫意HTML5 » 访问网站的ip到底能不能仿造?

CSS3教程HTML5教程