• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >正则表达式 > 正则表达式(regex)错误使用导致功能漏洞分析

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了regex正则表达式,regex表达式,regex,c regex,regex.replace等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

写在前面的话

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

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

定界符”^$”缺失bug

<?php
///检测用户名,只能是字符加数字
 
$user="chengmo8";
 
if(!preg_match("<strong>/[0-9a-zA-Z]+/</strong>",$user))
{
	exit("用户名错误!");
}
</div>

这是很常见的,因为没有定界符,正则表达式搜索,会从$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 组成所有字符,跟顺序无关
</div>

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

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 正则表达式(regex) 贪婪模式、懒惰模式使用方法
  • 正则表达式(regex)错误使用导致功能漏洞分析

相关文章

  • 2017-05-11正则表达式{n,m}量词(至少n次,最多m次)
  • 2017-05-11PHP和正则表达式教程集合之一第1/2页
  • 2017-05-11JavaScript正则表达式验证代码(推荐)
  • 2017-05-11Android正则表达式
  • 2017-05-1117种常用正则表达式
  • 2017-05-11正则表达式模式修正符 比如/esi
  • 2017-05-11正则表达式检查来访IP是否合法的实际应用
  • 2017-05-11PHP正则表达式抓取某个标签的特定属性值的方法
  • 2017-05-11javascript正则表达式容易被忽略的小问题整理
  • 2017-05-11asp.net常用正则表达式

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 教你轻松记住JS正则表达式
    • 几种常见攻击的正则表达式
    • 正则表达式基本语法详解
    • IOS正则表达式判断输入类型(整理)
    • 正则表达式工具 Match Tracer
    • JS 正则表达式的相关方法(正则学习笔记1)
    • asp+正则获得字符串中最后一个字母非字母不算
    • 密码强度检测函数(正则)
    • ASP.NET 中的正则表达式
    • 正则表达式分组实例详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有