司博文
司博文
2626 12 0

验证ip地址的正则真的有点弱

/(\d{1,3}.){3}\d{1,3}/
这个正则只是能验证个形式,
改进一下吧

0

See Also

Nearby


Discussion (12)

jat001
jat001 2013-05-07 10:53

就是验证个形式,你想怎么改?

0
司博文
司博文 2013-05-07 11:00

ip地址是有规则的,
255是最大了。
我没别的意思,
就是看见了,
提醒一下

0
ego008
ego008 2013-05-07 11:24

@司博文 欢迎贡献一个更好的。

0
司博文
司博文 2013-05-07 12:08

/((([1-9])|((0[1-9])|([1-9][0-9]))|((00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5])))).)((([0-9]{1,2})|(([0-1][0-9]{2})|(2[0-4][0-9])|(25[0-5]))).){2}(([1-9])|((0[1-9])|([1-9][0-9]))|(00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5])))/

以前写的,
测试过,
可能还存在错误,
但仅供参考。

0
jat001
jat001 2013-05-07 12:40

@司博文 BAE 上只有 HTTP_X_FORWARDED_FOR 能获得用户的真实 ip,而 HTTP_X_FORWARDED_FOR 是可以伪造的,这里的判断只是为了防止 SQL 注入。
如果不是伪造的,根本不需要判断;如果是伪造的,符合 ipv4 又有什么意义?
越复杂的正则越容易出问题,也降低了程序效率。

0
司博文
司博文 2013-05-07 12:54

@jat001
恩,学习了。
谢谢大神。

0
ego008
ego008 2013-05-07 13:09

@jat001 顺便在这里再说一下上次提到的《关于 HTTP_X_FORWARDED_FOR》 https://www.youbbs.org/t/1012 的注入问题,在7 楼回复里已提到,目前还没有把用户ip 的变量加入到sql 语句中,这样被注入的风险应该很小。

顺便贴一个阅读时看到的简单正则
preg_match("/[\d.]{7,15}/", $realip, $onlineip);

0
司博文
司博文 2013-05-07 13:13

@ego008 学习了。谢谢大神。嘿嘿

0
jat001
jat001 2013-05-07 13:24

@ego008 我计划加个记录用户 ip 的功能,所以这里做了判断

0
司博文
司博文 2013-05-07 13:26

@jat001 网上获取到的用户ip有时候不是真实的用户ip,
我们学校的出口IP都一个样。

0
jat001
jat001 2013-05-07 13:27

@司博文 就是为了获取这个出口 ip,其他获取 ip 的方式在 BAE 上都只能获取 BAE的内网 ip。

0
司博文
司博文 2013-05-07 13:29

@jat001 哦。了解

0
Login Topics