jat001
jat001
4035 9 0

关于 HTTP_X_FORWARDED_FOR

HTTP_X_FORWARDED_FOR 是可以伪造的,不对其进行任何处理的话,如果其中含有代码,岂不是会执行?

0

See Also

Nearby


Discussion (9)

ego008
ego008 2013-04-27 09:52

目前是这样简单过滤
$onlineip = addslashes($onlineip);

是不是该用一个正则来严格识别ip?

0
jat001
jat001 2013-04-27 10:02

@ego008 (\d{1,3}.){3}\d{1,3} 我写的 ipv4 的,ipv6 不太好写

0
ego008
ego008 2013-04-27 10:17

@jat001 v6太复杂了,要不考虑只放字符集[a-zA-Z0-9.:,]

0
jat001
jat001 2013-04-27 10:32

@ego008 我还是觉得复杂点好,安全,目前 ipv6 用户还不多,不如先不考虑

0
ego008
ego008 2013-04-27 10:34

@jat001 "HTTP_X_FORWARDED_FOR"变量可能包含多个IP

0
jat001
jat001 2013-04-27 10:45

@ego008 我知道,正常情况下是第一个,另外在 BAE 上只有 HTTP_X_FORWARDED_FOR 能获得访客的真实 ip,不知道 SAE 上是什么情况?

0
ego008
ego008 2013-04-27 10:45

@jat001 还是暂时取消通过HTTP_X_FORWARDED_FOR获取用户ip,目前程序在数据库还没用到用户ip,除了缓存版,以ip为key 来记录一个ip 的上次注册时间,SAE 版同步微博是需要附送ip。

若有代码,代码在获取时就被实行,对变量的过滤、识别只为下文利用。

0
jat001
jat001 2013-04-27 10:53

@ego008 我是指这样写容易被 SQL 注入,没有用到的话就无所谓了,不过增加个记录用户注册、最后登录 ip 的功能倒不错。

0
ego008
ego008 2013-04-27 11:58

@jat001
SAE
onlineip: 74.63.xxx.xxx, 74.63.xxx.xxx
HTTP_CLIENT_IP:
HTTP_X_FORWARDED_FOR: 74.63.xxx.xxx, 74.63.xxx.xxx
REMOTE_ADDR: 74.63.xxx.xxx

0
Login Topics