
我得说,这个问题我以前也懵,老把自己绕进去。搞后端的,谁没跟IP地址打过交道?但一遇到REMOTE_ADDR和XFF,脑子立马就成一团浆糊了。我就把这个坑,彻底给大家翻...
我得说,这个问题我以前也懵,老把自己绕进去。搞后端的,谁没跟IP地址打过交道?但一遇到REMOTE_ADDR和XFF,脑子立马就成一团浆糊了。我就把这个坑,彻底给大家翻出来。
最开始的时候,我专门写了一个超小的测试脚本(别问我用啥语言,能打印出数据头就行)。我就是想看看,一个请求,它到底能带回来什么东西。
这时候,我发现了:我没有走任何中间商,我的IP地址,稳稳当当趴在REMOTE_ADDR这个位置。这很直觉,因为服务器直接就看到了我的电脑。
光看自己的IP没意思,我要看它变脸。我找了一台用来做“保护层”的服务器(也就是大家常用的那个“中间人”)。我设置好,让所有的访问请求都必须先经过它,再传到我的测试脚本那儿。
这一次,我再次用浏览器访问,脚本又一次运行。

结果立马不一样了!
REMOTE_ADDR:它变了! 这回显示的,是那个“保护层”服务器的IP。XFF:这个地方突然就冒出来一长串IP地址。最前面,那个才是我的真IP。后面那一堆,是中间服务器自己加上去的。我当时一拍大腿,明白了。REMOTE_ADDR只管跟它“说话”的这个IP是哪个。它是个“近视眼”,只看得到最近的。可那个XFF,它就是个“记事本”,记录了一路走来,都经过了哪些IP。
为什么要这么纠结这个?因为我吃过大亏!那是一个深夜,系统警报响得跟催命一样。流量突然暴增,服务器CPU直接飙到顶。我赶紧去看日志,一查REMOTE_ADDR,看到一个IP地址在疯狂地请求。

我当时脑子一热,没多想,直接就把那个REMOTE_ADDR对应的IP给封了。心想:搞定!
结果刚封完,警报又响了,流量丝毫没减!我当时冷汗都下来了,手忙脚乱,翻来覆去地找问题。我抓耳挠腮地搞了两个小时,差点被领导骂死。
还是一个老伙计,他扫了一眼我的日志,淡淡地说:你看下XFF。我把目光转过去,才看到那里藏着另一个,不断变化的IP。我赶紧封禁了XFF里最前面的那个真IP。警报立马停了,世界瞬间安静。
我一下子就顿悟了。我之前封的,是那个中间保护层的IP!那个攻击者,聪明地躲在了后面,让我自己人打了自己人。我当时的感觉,就像是白白被隔离了十几天,结果老东家跑路,那种说不出的委屈和无力!就差那么一点,我辛苦维护的系统就完了!
有了这个血泪教训,我总结出了一个快速判断的土办法:
REMOTE_ADDR,它就是真IP。REMOTE_ADDR就是假的,必须看XFF里最前面的那个IP,那才是客户端的真身!只要看到有XFF这个数据头出现,我立马知道,这后面肯定有戏。实践出真知,别再让这种小问题坑了自己!