导图社区 后端基础——正则表达式
本思维导图帮助你了解什么是正则表达式,正则表达式能干什么,怎么用正则表达式。喜欢的小伙伴可以点个赞哦!
编辑于2022-10-30 20:53:13 甘肃第五课 后端基础——正则表达式
初始sql注入
万能密码
本质是sql注入
即用户输入的数据被当做SQL语句执行
select * from admin where username = 'admin' and password = ' ' or 1=1 limt 1 , 1 -- qwe'
and 前后条件都成立
or 有一个条件成立即可
select * from admin where username = 'admin' 是我去admin的表里找有没有 username等于admin的值
password = ' ' 同时满足password 等于空值
or 1=1 即前面的条件不成立,但是后面的1=1的条件始终成立
limt 1 , 1 从第2行去1行数值(limt n,m 即从n+1行开始取,取m个)
-- qwe 数据库里的注释
其实有的时候我们输入一些恶意的传参会造成网站功能的绕过或者缺失
万能的修复建议
过滤
本质是检测用户的传参,然后提出或者拦截危险部门
正则表达式的核心就是过滤
什么是正则表达式
正则表达式概念
又称规则表达式,在代码中常简写为regex,regexp或RE,计算机科学的一个概念,正则表达式通常被用来检索、替换哪些符合某个模式(规则)的文本
正则表达式的特点
灵活性、逻辑性和功能性非常强大
可以迅速地用极简单的方式达到字符串的复杂控制
对于刚接触的人来说,比较晦涩难懂
正则表达式用途
判断字符串是否符合某一规则(判断是否符合手机号,邮箱规则)
从一个字符串中找出符合规则的所有子字符串(取HTML标签ming)
PHP中正则表达式常用函数
PHP中使用正则规则一定要加代表正则的表示 //
preg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组) 返回匹配到的次数
preg_match_all('/a/','a',$c);
a在/a/表达式里匹配的次数,把次数放在变量$c中
preg_replace(正则表达式、替换成什么、匹配字符串) 返回替换后的结果
preg_replace('/a/','1','slaghshglslasflja;dfsnfksjdsxigogwaa');
把slaghshglslasflja;dfsnfksjdsxigogwaa范围内的a替换成1
常用转移字符
数字:\d
preg_match_all('/\d/','13284829719287591759875198794732891338',$c);
在132848297192875917598751987947328sagksgkhjgks91338里出现了数字几次,把次数放在变量c里
非数字:\D
preg_match_all('/\D/','13284829719287591759875198794732891338',$c);
在132848297192875917598751987947328sagksgkhjgks91338里出现了非数字几次,把次数放在变量c里
空白字符(空格、制表符、换页符等):\s
非空白字符:\S
单词字符(26个英文字母+数字+下划线_):\w
可以用于限制输入内容,只能输入字母、数字、下划线
非单词字符:\W
自定义字符结合
字符集合:【单个字符或字符区间】,用于匹配集合内字符
如:
[a-z]表示a-z这26个小写字母
[0-9a-z]表示0-9这10个数和a-z26个小写字母
[135a-h]表示包含数字1,3,5和字母a-h这8个字母
注意:两个不同字符段间请勿使用,隔开。
非集:[^单个字符或字符区间],用于匹配非集合内字符
如
[^0-9]表示匹配所有非数字字符
[^a-zA-Z]表示匹配所有非字母字符
计算机的本质是数学,在往下的本质是二进制
ASCII表
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示 [2] 。 美国信息交换标准代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,是一种标准的单字节字符编码方案,用于基于文本的数据。它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后来它被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母 [3] 。
正则表达式语法
关键字
()
和数学一样,括号内代表一个整体
^
匹配输入字符串的开始位置
preg_match_all('/^132/','13284829719287591759875198794732891338');
在132848297192875917598751987947328sagksgkhjgks91338里匹配开头是不是132
注意 在【】里面是取反,不在是匹配
$
匹配输入字符串的结尾位置
preg_match_all('/132$/','13284829719287591759875198794732891338');
在132848297192875917598751987947328sagksgkhjgks91338里匹配结尾是不是132
.
通配符[代表任意字符][不匹配换行]
所有的内容都能匹配
preg_match_all('/./','13284edf7');
匹配132848297里的数字,为9,因为.是通配符,所以内有内容都匹配
*
匹配0次或者多次
可以匹配内容中所有的同时还能匹配类似结尾符这样看不见的空字符
preg_match_all('/1*/','ab');
匹配ab,匹配到了3个,有a,b,和结果空字符
+
匹配1次或者多次
有多个相同且连贯的值会匹配一个
preg_match_all('/1+/','111');
虽然内容是三个1,但是只匹配一个1
preg_match_all('/1+/','11a1');
虽然内容是三个1,但是匹配2个1
\
转移字符
|
两项之间的一个选择
或的意思
preg_match_all('/<a>|ab/','1<a>degndsab');
在1<a>degndsab中匹配<a>或ab,匹配到了2次
限定符
{n}
例如
0{8} 是指只有连起来8个0才会被匹配
{n,}
例如
0{2} 是指只要2个0及其以上的就会被匹配
{n,m}
例如
0{2,4} 是指最少匹配2个0最多匹配4个0
注意
被匹配时,默认匹配最多的次数
修饰符
/i
不区分大小写
/A
匹配规则必须从头开始匹配
/S
将匹配一切字符
/x
正则表达式中的空白字符会被忽略