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

By 司博文 at 2013-05-07 18:14:33 • 714次点击

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

ip地址


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

jat001 at 2013-05-07 18:53:53
1

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

司博文 at 2013-05-07 19:00:45
2

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

ego008 at 2013-05-07 19:24:45
3

/((([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])))/

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

司博文 at 2013-05-07 20:08:44
4

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

jat001 at 2013-05-07 20:40:40
5

@jat001

恩,学习了。
谢谢大神。

司博文 at 2013-05-07 20:54:59
6

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

顺便贴一个阅读时看到的简单正则

preg_match("/[\d\.]{7,15}/", $realip, $onlineip);

ego008 at 2013-05-07 21:09:18
7

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

司博文 at 2013-05-07 21:13:55
8

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

jat001 at 2013-05-07 21:24:52
9

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

司博文 at 2013-05-07 21:26:04
10

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

jat001 at 2013-05-07 21:27:26
11

@jat001 哦。了解

司博文 at 2013-05-07 21:29:32
12
登录 后发表评论