Ticket #92 (new defect)

Opened 14 years ago

Last modified 14 years ago

关于部分用户登录报错

Reported by: liaojunqiang Owned by:
Priority: trivial Milestone:
Component: 商家后台 Version:
Keywords: ip 超过字段长度 Cc:
Due Date: 15/03/2012

Description (last modified by liaojunqiang) (diff)

1.问题
需求报障,it商城某一家店铺登录时出现"你输入的字数超过数据库限定的长度",但是我用我的电脑可以正常登录;
2.调查
登录的时候除了记日志,没有其他的数据库出错,可能是记日志时,某个字段值太大所导致,查服务器的日志所得,是ip地址过长,导致记录日志时出错;

org.apache.openjpa.lib.jdbc.ReportingSQLException: ORA-12899: value too large for column "CYP_NW_APP"."ENT_LOGIN_LOG"."IP" (actual: 59, maximum: 50)
221.130.30.180/ 122.85.18.45, 127.0.0.1, 221.130.30.180

221.130.30.180这个就是我们在移动节点的服务器IP

3.解决
修改录入ip时限制长度,联系服务器管理配置一下X-Real-IP,因为程序检测到没有X-Real-IP就去取X-Forwarded-For.
名词解释

X-Real-IP
反向代理时用于取得用户真实IP(资料很少,有待补充)。
X-Forwarded-For
是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。
这一HTTP头一般格式如下:

X-Forwarded-For: client1, proxy1, proxy2

其中的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。 在上面这个例子中,这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。

鉴于伪造这一字段非常容易,应该谨慎使用X-Forwarded-For字段。正常情况下XFF中最后一个IP地址是最后一个代理服务器的IP地址, 这通常是一个比较可靠的信息来源。

Change History

comment:1 Changed 14 years ago by liaojunqiang

  • Description modified (diff)

comment:2 Changed 14 years ago by liaojunqiang

  • Description modified (diff)
Note: See TracTickets for help on using tickets.