正则表达式(regex)错误使用导致功能漏洞分析

写在前面的话

正则表达式它的强大字符串匹配功能,导致目前在各种程序语言中,都非常流行!它被用来描述或者匹配一系列符合某个句法规则的字符串。很多刚刚使用正则表达式都是从听说这个,然后在要使用时候去网上搜索。 很少人一开始就系统去学习正则表达式,从定义原理使用系统学习。因为,对应初学者觉得它太麻烦了,好多原字符。看到那么长一串字符,就很头痛。因此,也懒得去学习。一般遇到问题,直接去网上搜索。如:“邮箱正则表达式,手机号正则表达式,url正则表达式…..” ,我们发现一个很有意思现象,“怎么邮箱正则表达式可以各种各样,url正则表达式也不相同“,都出都在推荐,都说自己是正确的,到底那个是正确的呢?

从各异的正则表达式,我们可以得出2个结论。一、正则表达式很灵活,多种方法可以实现同一种结果(条条大路通罗马),二、正则表达式匹配结果需要验证的,复杂正则表达式很容易产生错误匹配。今天,我这里不说正则表达式灵活性,我们看看常见正则表达式错误使用,产生功能漏洞例子。希望,我们在使用时候多多注意。以下例子,来自我工作中审核代码,经常出现例子,也欢迎朋友们补充!

定界符”^$”缺失bug

<?php
///检测用户名,只能是字符加数字

$user="chengmo8";

if(!preg_match("<strong>/[0-9a-zA-Z]+/</strong>",$user))
{
	exit("用户名错误!");
}

这是很常见的,因为没有定界符,正则表达式搜索,会从$user中,字符中从左向右搜索,指导找到满足条件的字符,就会匹配到,并且返回true,程序将继续执行。我们测试,用户名输入:chengmo8,chengmo8??!,#$chengm,中国cadadf,都可以匹配成功,看似要限制只能字符加数字用户名。实际由于缺乏限定符正则表达式,变成了,只要字符串中包含字母加数字就可以注册。而我们需要的是,从头到尾字符串必须是字母加数字。正则表达式应该是:^[0-9a-zA-Z]+$ ,看似简单,在做从头到尾字符匹配时候,不要忘记了^$字符。一个匹配输入字符开头,一个匹配输入字符结尾(默认换行符前)

这种经常做,手机号,邮箱,url,注册用户名,密码等。都需要有限定符号!

方括号字符"[ ]”中字符使用Bug

在正则表达式中,常见正则表达式原字符(.*?等等)在方括号字符中将变成普通字符。 在方括号字符中,表示特殊字符,只有“^-\” 3个字符是特殊字符。其中,“^”字符,在左方括号第一个字符时候,是代表不在后面所有字符中字符!

如:[^0]不能是0字符。而如果是:[0^] ,就代表包含0^字符了。因为:^已经不是左括号最右边一个字符了。 已经跟普通字一样了。“-”字符代表是范围字符,如:[0-9] 代表是匹配0到9直接字符。”\”转义字符,如果想匹配”-“字符,可以[0\-9],如果要匹配”\”,可以是:[0\\9],表示“09\” 3个字符了。说这么些,其实就是因为,很多朋友在使用方括号字符时候,经常会弄错特殊字符。

<?php
///检测用户名,只能是字符加数字

$code = "";

///匹配字符范围包含.*?
preg_match("/[.*?]+/",$code);

///匹配字符范围包含a到z 26个字符
preg_match("/[a-z]+/",$code);

///匹配字符范围包含A到z 实际上,是从默认情况ascii表中,A字符到z字符中间,一共48字符
preg_match("/[A-z]+/",$code);

///匹配字符范围包含A到z 是对应ascill码,16进制
preg_match("/[x41-x7A]+/",$code);

///只想匹配字符串and
preg_match("/[and]/",$code);
///实际匹配,所有包含a,n,d 组成所有字符,跟顺序无关

加红是经常错误理解,只想匹配and,一旦加入到"[ ]"中字符,可以理解为所有字符组成字符 集合。任意在其中出现字符,就可以匹配,跟顺序无关系!如果真需要匹配这类,按字符分组来,如”and|bnd” 将匹配and字符串,或者是bnd字符串。”|”字符是,字符串或操作符。左右两边连续字符串会组合为一个整体匹配。

好了,今天就整理,常见正则表达式,2种常见错误。欢迎大家交流!

(0)

相关推荐

  • 正则表达式(regex)错误使用导致功能漏洞分析

    写在前面的话 正则表达式它的强大字符串匹配功能,导致目前在各种程序语言中,都非常流行!它被用来描述或者匹配一系列符合某个句法规则的字符串.很多刚刚使用正则表达式都是从听说这个,然后在要使用时候去网上搜索. 很少人一开始就系统去学习正则表达式,从定义原理使用系统学习.因为,对应初学者觉得它太麻烦了,好多原字符.看到那么长一串字符,就很头痛.因此,也懒得去学习.一般遇到问题,直接去网上搜索.如:"邮箱正则表达式,手机号正则表达式,url正则表达式-.." ,我们发现一个很有意思现象,&qu

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

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

  • C#正则表达式Regex类用法实例分析

    本文实例讲述了C#正则表达式Regex类用法,分享给大家供大家参考.具体实现方法如下: 一.在C#中,要使用正则表达式类,请在源文件开头处添加以下语句: 复制代码 代码如下: using System.Text.RegularExpressions; 二.RegEx类常用的方法 1.静态Match方法 使用静态Match方法,可以得到源中第一个匹配模式的连续子串. 静态的Match方法有2个重载,分别是 复制代码 代码如下: Regex.Match(string input, string pa

  • jQuery基于正则表达式的表单验证功能示例

    本文实例讲述了jQuery基于正则表达式的表单验证功能.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &l

  • dvbbs 8.2 SQL Injection注射漏洞分析

    password=123123&codestr=71&CookieDate=2&userhidden=2&comeurl=index.asp&submit=%u7ACB%u5373%u767B%u5F55&ajaxPost=1&username=where%2527%2520and%25201%253D%2528select%2520count%2528*%2529%2520from%2520dv_admin%2520where%2520left%2

  • javascript正则表达式模糊匹配IP地址功能示例

    本文实例讲述了javascript正则表达式模糊匹配IP地址功能.分享给大家供大家参考,具体如下: function checkip() { var strIP = document.getElementById("accessip").value; var re = /^(\d{1,3}|\*)\.(\d{1,3}|\*)\.(\d{1,3}|\*)\.(\d{1,3}|\*)$/g //模糊匹配IP地址的正则表达式 if(re.test(strIP)){ if(RegExp.$1

  • PHP正则表达式匹配替换与分割功能实例浅析

    本文实例讲述了PHP正则表达式匹配替换与分割功能.分享给大家供大家参考,具体如下: 正则表达式在PHP中的作用主要包括:分割.匹配.查找与替换. 匹配功能 preg_match_all 全部匹配函数 preg_match_all (string pattern,string subject,array matches[, int flags]); 对结果的排序使 $matches[0] 为全部模式匹配的数组. 用途:截取比较精确的内容,用于采集网页,分析文本等. 替换功能 preg_replac

  • Java正则表达式的替换和分组功能

    前言 这篇来学习正则表达式的替换和分组功能,替换很好理解,分组有点复杂,特别是如何写有效的分组的正则表达式.这篇通过几个练习,简单了解下替换和分组功能. 1.替换功能 在String类有一个替换功能的方法,结合正则表达式去实现替换,下面是replaceAll()方法的举例. package regex; public class Demo1_Regex { public static void main(String[] args) { String str = "wo1shi2zhong3gu

  • 网络安全渗透测试反序列化漏洞分析与复现工作

    目录 0x00概述 0x01服务分析 0x02漏洞分析 0x03POC构造 0x04总结 0x00 概述 GENESIS64软件的多个版本存在反序列化漏洞,影响多个组件,例如: 根据CVE漏洞相关描述,下载对应GENESIS软件版本搭建环境,进行漏洞分析与复现工作. 0x01 服务分析 安装完成后对整个系统进行熟悉,发现Web程序接口使用Silverlight进行数据交互,因此需要找到相关功能文件进行分析.经过一些时间查找,找到系统服务开启的配置文件,在配置文件中定义了访问接口信息以及调用的相关

  • 滥用@PathVariable导致bug原因分析解决

    目录 前言 复现 3个匹配步骤 1,根据Path精准匹配 2,如果精准匹配没有成功,就开始模糊匹配 3,如果模糊匹配还匹配不上,就返回null 最后 前言 最近测试同学反馈,上周上线的一个功能会偶然性的报404,按理说这个功能在测试环境已经测试通过,也在线上运行了好几天,怎么会突然报错呢. 一开始以为是前端同学请求的接口有误,但是测试又说只是偶然性的404,几率也不高,于是打开日志找到对应的接口,一眼看到了接口上定义的@PathVariable,再一看参数,基本就确定是开发同学为了偷懒又误用@P

随机推荐