正则表达式(regex)或操作符”|“使用易出现功能Bug

接上一篇:正则表达式(regex)错误使用导致功能漏洞 ,我们继续梳理,正则表达式错误使用,导致功能设计漏洞(bug),做web方面,需要掌握的知识很多,网站开发这项工作,在国内也就10多年,很多开发人员,都是通过:培训(自学) ->模仿->做项目 ,这样一个过程。很多就是修修改改后,就成为了web开发工程师。这行入门低,很容易上手。但是想成为大师级的,还是很不容易。需要学习,掌握的知识几十门。而对于刚刚入门同人,很多时候因为缺乏系统学习,理论支持。导致提升有些心有余而力不足啦!因此,出现这些或多或少的功能设计漏洞,是很常见的!

好了,有些跑题了,在做代码走查时候,这类漏洞也是时常出现。我们看下,下面代码:

<?php
$user="bcd123张三";
///匹配用户名中出现abc还有bcd开头,后面紧跟是数字字符

preg_match_all("/abc|bcd\d+/",$user,$match);
var_dump($match);

/*结果是
array(1) {
 [0]=>
 array(1) {
 [0]=>
 string(6) "bcd123"
 }
}
*/

查找所有页面出现abc或者bcd开头,后面紧跟数字字符串。通过上面,我们看,正确匹配到bcd123,如果我们输入:$user = “abc123张三”, 发现不能匹配到了。原因是”|”字符,优先级最低,以上写法会变成:匹配abc 或者是bcd\d+ 字符串。

以上图,将|,包含到()中。

如果要提升优先级,可以(abc|bcd)\d+ ,匹配所有abc或者bcd 字符串,并且后面紧跟数字的。在使用”|”字符串,注意它的优先级级别低,如果要优先匹配,可以放入()中。

(0)

相关推荐

  • 正则表达式匹配任意字符(包括换行符)的写法

    今天在Java中想使用正则表达式来获取一段文本中的任意字符.于是很随意得就写出如下匹配规则: (.*) 结果运行之后才发现,无法获得换行之后的文本.于是查了一下手册,才发现正则表达式中,"."(点符号)匹配的是除了换行符"\n"以外的所有字符.同时,手册上还有一句话:要匹配包括 '\n' 在内的任何字符,请使用像 '[.\n]' 的模式.于是我将正则表达式的匹配规则修改如下: ([.\n]*),当然,如果是在java程序中直接写到话,需要改为([.\\n]*) 结果

  • 正则表达式匹配不包含某些字符串的技巧

    经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤"hede"字串,但这种写法是错误的.我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的意思是字符串里不能包含'h','e','d'三个但字符.那什么样的正则表达式能过滤出不包含完整"hello"字串的信息呢? 事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确.就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配,从而解决我们的问

  • 正则表达式\w元字符使用介绍

    正则表达式\w元字符: \w元字符用来匹配单词字符,它等价于"[a-zA-Z0-9]". 语法结构: 构造函数方式: new RegExp("\\w") 对象直接量方式: /\w/ 浏览器支持: IE浏览器支持此元字符. 火狐浏览器支持此元字符. 谷歌浏览器支持此元字符. 实例代码: 实例一: var str="antzone<12>love"; var reg=new RegExp("\\w","g&q

  • 使用正则表达式替换报表名称中的特殊字符(推荐)

    正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规则)的文本. 许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能强大的正则表达式引擎,还有java语言自带的.正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的.正则表达式通常缩写成"regex",单数有regexp.regex,复数

  • 正则表达式字符类加深理解

    正则表达式字符类加深理解: 一.基本概念: 字符类相对来说是比较简单的,但是也有可能由于理解不够深入或者大意造成一些误区,下面再来做一下介绍. 字符类[]能够匹配包含在中括号中的一系列字符中的任意一个,但是匹配的结果只能够是其中的一个而不是多个,例如: var str="abcd"; var reg=/[abcd]/; console.log(str.match(reg)); 以上正则表达式只能够匹配字符"a". 二.使用连字符"-": 字符类可

  • 正则表达式教程之操作符及说明详解

    本文实例讲述了正则表达式中的操作符及说明.分享给大家供大家参考,具体如下: 一.普通字符 包括所有未显式指定为元字符的打印和非打印字符组成,如大小写字母.数字.标点符号等. 二.元字符 元字符是一些在正则表达式里有着特殊含义的字符.因为元字符在正则表达式里有着特殊的含义,所以这些字符不能用来代表它们本身,必须通过给它加个反斜杠前缀来转义,如此得到的转义序列将匹配那个字符本身而不是它特殊的元字符含义.如[表示一个字符集合的开始,如果在正则表达式中要匹配[,那么需要这样引用:\[,才能表示[本身.

  • 利用正则表达式判断一个给定的字符是否是回文

    如果给定的字符串是回文,返回true,反之,返回false. 如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文). 注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文. 函数参数的值可以为"racecar","RaceCar"和"race CAR". 关键代码: 去掉字符串中的标点符号和空白格.可以用str.replace()+正则表达式匹配. v

  • Java正则表达式处理特殊字符转义的方法

    正则需要转义字符 '$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|' 异常现象: java.util.regex.PatternSyntaxException: Dangling meta. character '*' near index 0 解决方法 对特殊字符加\\转义即可. 注意:虽然使用[]在部分条件下也可以,但是在对于(.[.{范围边界开始符不匹配的情况下会报如下: 异常现象 java.util.

  • 正则表达式\W元字符使用方法

    正则表达式\W元字符: \W(大写)用来匹配非单词字符,它等价于"[^a-zA-Z0-9_]". 语法结构: 构造函数方式: new RegExp("\\W") 对象直接量方式: /\W/ 浏览器支持: IE浏览器支持此元字符. 火狐浏览器支持此元字符. 谷歌浏览器支持此元字符. 实例代码: 实例一: var str="antzone<12>love"; var reg=new RegExp("\\W","

  • C#正则表达式转义字符介绍

    正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 转义匹配语法: "\"+实际字符 \ . * + ? | ( ) { }^ $ [ ] 例如:\\匹配字符"\" \n 匹配换行 \r 匹配回车 \t 匹配水平制表符 \v 匹配垂直制表符 \f 匹配换页 \nnn 匹配一个8进制ASCII \xnn 匹配一个16进制ASCII \unnnn 匹

  • 正则表达式\d元字符(相对于数字0-9)

    正则表达式\d元字符: \d元字符可以匹配数字字符,等价于"[0-9]". 语法结构: 构造函数方式: new RegExp(\\d) 对象直接量方式: /\d/ 浏览器支持: IE浏览器支持此元字符. 火狐浏览器支持此元字符. 谷歌浏览器支持此元字符. 实例代码: 实例一: var str="I love antzone \n and you 360"; var reg=new RegExp("\\d","g"); cons

随机推荐