正则表达式

举报
Gere 发表于 2022/12/31 08:14:30 2022/12/31
【摘要】 2-7 正则表达式一、初识SQL注入逻辑没错,功能也能达到。但是老师在不知道密码的情况下也能登录。尝试密码框里面写 or 1=1#什么是注入注入攻击的本质,是把用户输入的数据当做代码执行。这里有两个关键条件:第一个是用户能够控制输入第二个是原本程序要执行的代码,拼接了用户输入的数据然后进行执行那什么是SQL注入,就是针对SQL语句的注入,也可以理解为用户输入的数据当做SQL语句的代码执行了S...

2-7 正则表达式

一、初识SQL注入

image-20201009190022994

逻辑没错,功能也能达到。
但是老师在不知道密码的情况下也能登录。
尝试密码框里面写 or 1=1#

什么是注入
注入攻击的本质,是把用户输入的数据当做代码执行
这里有两个关键条件:

  • 第一个是用户能够控制输入
  • 第二个是原本程序要执行的代码,拼接了用户输入的数据然后进行执行

那什么是SQL注入,就是针对SQL语句的注入,也可以理解为用户输入的数据当做SQL语句的代码执行了
SQL注入是1998年一名叫做rfp的黑客发表的一篇文章所进入大众视线的
那我们如何防护?现在常见的防护软件主流核心就是通过正则来过滤传参

二、 什么是正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式的特点是:

  1. 灵活性、逻辑性和功能性非常强;
  2. 可以迅速地用极简单的方式达到字符串的复杂控制。
  3. 对于刚接触的人来说,比较晦涩难懂。

正则表达式用途:
判断字符串是否符合某一规则(判断是否符合手机号、邮箱规则)。
从一个字符串中找出符合规则的所有子字符串(取HTML标签名)。

三、PHP中正则表达式常用函数

PHP中使用正则规则一定要加代表正则的标识/ /

preg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组)
返回匹配到的次数

preg_replace (正则表达式、替换成什么、匹配字符串)
返回替换后的结果

替换支持数组格式

四、正则表达式语法

常用转义字符:
数字:\d
非数字:\D
空白字符(空格、制表符、换页符等):\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]表示匹配所以非字母字符。
()      => 和数学一样很像,代表这是一个整体。
^       => 	匹配输入字符串的开始位置
$       => 匹配输入字符串的结尾位置
.        => 通配符[代表任意字符][不匹配换行]
*        => 匹配0次或者多次
+       => 匹配1次或者多次
\         => 转义字符
|          =>   两项之间的一个选择。
()      => 和数学一样很像,代表这是一个整体。
^       => 	匹配输入字符串的开始位置
$       => 匹配输入字符串的结尾位置
.        => 通配符[代表任意字符][不匹配换行]
*        => 匹配0次或者多次
+       => 匹配1次或者多次
\         => 转义字符
|          =>   两项之间的一个选择。
	限定符:
	{n}     => 例如:  0{8}     意思是指 只有连起来8个0才会被匹配   
	{n,}    =>例如: 0{2,}    意思是 只要有2个0及其以上的就会被匹配
	{n,m}   =>  例如: 0{2,4} 意思是最少匹配2个0,最多匹配4个0
	注:被匹配时,默认匹配最多的次数
	修饰符:
	 /i    => 不区分大小写
	/A    => 匹配规则必须从头开始匹配
	/s     => .将匹配一切字符
	/x     => 正则表达式中的空白字符会被忽略
	/e     => 代码执行 仅限preg_replace()     => 可以写一句话但是不能连接菜刀
	file_put_contents 函数 [把字符串写入文件] 
	file_put_contents(写入文件的地址,写入的文件的内容)

靶场

链接

<?php  
$key=\'flag{********************************}\'; 
$Regular= preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match); 
if( $Regular ){  
  die(\'key: \'.$key); 
}

image-20201009200757218

image-20201009202716023

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。