首页 > 编程语言 >05web安全学习---PHP正则表达式

05web安全学习---PHP正则表达式

时间:2023-06-03 22:00:32浏览次数:51  
标签:05web 字符 匹配 数字 正则表达式 --- 字符串 语法 PHP

05web安全学习---PHP正则表达式_正则表达式

一、初识SQL注入

05web安全学习---PHP正则表达式_正则表达式_02

<meta charset='GBK' />
<form><center>
	用户登录<br />
  账号: <input type='text' name='uname' /><br />
  密码: <input type='password' name='pwd'/><br />
  <input type='submit' value='登录'>
</form></center>
<?php
@$username = $_REQUEST['uname'];
@$password = $_REQUEST['pwd'];
if(@$_REQUEST['uname'] != '' and @$_REQUEST['pwd'] != ''){  
	$conn = mysqli_connect('127.0.0.1', 'root', 'root', 'test'); //数据库的连接
	$sql = 'select * from admin where username="'.$username.'" and password ="'.$password.'"';
	$safelogin = $username.$password;
	if(strstr($safelogin, 'or')){die('Illegal attack');}
	$b = mysqli_query($conn, $sql); //sql语句的执行
	$result = mysqli_fetch_array($b); //将数据库里的对象变为数组
  echo "你的密码是: ".$result['password'];  //获取数据
}else{echo '账户密码错误';}  
?>

二、什么是正则表达式

05web安全学习---PHP正则表达式_正则表达式_03

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

05web安全学习---PHP正则表达式_正则表达式_04

preg_match_all(, , );
preg_replace(, , );

05web安全学习---PHP正则表达式_正则表达式_05


05web安全学习---PHP正则表达式_正则表达式_06

结果为:

05web安全学习---PHP正则表达式_正则表达式_07


四、正则表达式语法

正则表达式的语法-字符(1):

05web安全学习---PHP正则表达式_正则表达式_08

05web安全学习---PHP正则表达式_正则表达式_09

正则表达式的语法-字符(2):

05web安全学习---PHP正则表达式_正则表达式_10

05web安全学习---PHP正则表达式_正则表达式_11

05web安全学习---PHP正则表达式_正则表达式_12

正则表达式的语法-关键字 :

05web安全学习---PHP正则表达式_正则表达式_13

05web安全学习---PHP正则表达式_正则表达式_14

正则表达式的语法-限定符 + 修饰符 :

05web安全学习---PHP正则表达式_正则表达式_15

05web安全学习---PHP正则表达式_正则表达式_16

05web安全学习---PHP正则表达式_正则表达式_17


05web安全学习---PHP正则表达式_正则表达式_18

05web安全学习---PHP正则表达式_正则表达式_19

05web安全学习---PHP正则表达式_正则表达式_20

补充知识点:

1、什么是SQL注入?
把用户输入的数据当做SQL代码执行。

2、什么是正则表达式?
正则表达式又称规则表达式,在代码中常简写为regex、regexp或RE,正则表达式通常被用来检索、替换那些符合某个模式的文本。

3、正则表达式的格式?
"/表达式/[修饰符]"。

4、正则表达式的用途是什么?
(1)判断字符串是否符合某一规则(比如判断是否符合手机号、邮箱规则等等)
(2)从一个字符串中找出符合规则的所有子字符串(比如取HTML标签名等等)

5、当使用正则表达式时要注意什么?
在php中使用正则表达式时一定要写标识符//( /表达式/ )

5、php中正则表达式常用相关函数是什么?
Preg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组)
该函数会返回匹配到的次数(可能是0),或者如果发生错误返回FALSE
preg_replace(正则表达式、替换成什么、匹配字符串)说
该函数会返回替换后的结果

6、正则表达式的语法——字符(一)
数字:\d
非数字:\D
空白字符(空格、制表符、换页符等):\s
非空白字符:\S
单词字符(26个英文字母+数字+下划线):\w
非单词字符:\W

7、正则表达式的语法——字符(二)
字符集合:[单个字符或字符区间],用于匹配集合内字符
比如:
[a-z]表示a-z这26个小写字母
[0-9a-z]表示0-9这10个数字和a-z这26个小写字母
[123a-h]表示包含数字1,2,3和a-h这8个字母
注意:两个不同的字符段间一定不要用逗号隔开
非集合字符:[^单个字符或字符区间],用于匹配非集合内字符
比如:
[^0-9]表示匹配所有非数字字符
[^a-zA-Z]表示匹配所有非字母字符

8、字符集合的数字区间该注意什么?
数字区间正则只能匹配0-9的数字,因为正则只能一位一位的匹配,所以超过9以外的数字只是我们给的概念,对于正则机制来说它是认不到的,比如[100-120]就无法被匹配

9、正则表达式的语法——关键字
() 表示一个整体
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结尾位置
. 通配符,代表任意字符但不匹配换行
* 匹配0次或者多次
+ 匹配1次或者多次
\ 转义字符
| 两项之间的一个选择

10、转义字符“\”的使用
转义字符主要是将一些特殊字符转为普通字符。而这些常用特殊字符有”.”、”?”、”\”等。

11、^和$结合使用的注意问题?
如果^和$结合使用且中间没有其他表达式,那么他们中间就不能出现别的字符,不然无法匹配,比如/^3b$/表示3开头b结尾,所以只有3b才能被匹配,如果写了3acb就无法被匹配。什么情况下才能被匹配呢,可以使用.(通配符)。

12、非集合字符的“^”和关键字“^”的区别?
非集合字符的“^”可理解为排除字符,排除操作,一般放在[]中,如[^1-5], 表示该字符不是1-5之间的数字;而关键字的“^”表示行开始,如"^ab"表示以ab开头的字符串。

13、正则表达式的语法——限定符
{n} 例如0{8} 表示只有连起来8个0才会被匹配
{n,} 例如0{2,} 表示只要2个0及其以上的就会被匹配
{n,m} 例如0{2,4} 表示最少匹配2个0,最多匹配4个0
注:被匹配时,默认匹配最多的次数

14、正则表达式的语法——修饰符
i 表示不区分大小写
A 匹配规则必须从头开始匹配
s 表示.将匹配一切字符
x 表示正则表达式中的空白字符会被忽略
e 代码执行仅限preg_replace()

15、匹配模式的优先级是什么?(优先级从高到低排)
\转义字符;()[]大原子和原子表;*+?{n}{n,}{n,m}重复匹配(匹配次数);^$\b\B边界限制;|模式选择


标签:05web,字符,匹配,数字,正则表达式,---,字符串,语法,PHP
From: https://blog.51cto.com/u_15388211/6408989

相关文章

  • HTTP Content-Security-Policy CSP策略
       CSP(ContentSecurityPolicy)内容安全策略是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本(XSS)和数据注入攻击等。无论是数据盗取,网站内容污染还是恶意软件分发,这些攻击都是主要的手段。   CSP被设计完全向后兼容,不支持CSP的浏览器也能与实现了......
  • 强化学习:连续控制问题中Actor-Critic算法的linear baseline
    最近在看连续控制问题,看到了一个Actor-Critic算法中手动扩展features和设置linearbaseline的方法,这些方法源自论文:《BenchmarkingDeepReinforcementLearningforContinuousControl》。  对于低维的features我们可以手动扩展:  代码实现:returntorch.cat([observations,ob......
  • 强化学习基础篇[3]:DQN、Actor-Critic详细讲解
    强化学习基础篇[3]:DQN、Actor-Critic详细讲解1.DQN详解1.1DQN网络概述及其创新点在之前的内容中,我们讲解了Q-learning和Sarsa算法。在这两个算法中,需要用一个Q表格来记录不同状态动作对应的价值,即一个大小为$[状态个数,动作个数]$的二维数组。在一些简单的强化学习环境中,比如......
  • 密码工程-大素数
    密码工程-大素数任务在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正......
  • 【python基础】复杂数据类型-列表类型(排序/长度/遍历)
    1.列表数据元素排序在创建的列表中,数据元素的排列顺序常常是无法预测的。这虽然在大多数情况下都是不可避免的,但经常需要以特定的顺序呈现信息。有时候希望保留列表数据元素最初的排列顺序,而有时候又需要调整排列顺序。python提供了很多列表数据元素排序的方式,可根据情况选用。1......
  • WPF 入门笔记 - 03 - 样式基础及控件模板
    ......
  • 日期筛选视图-MonthArchiveView
    2023.6.3日期筛选视图是根据模型里的某个日期字段进行数据筛选的,然后将符合结果的数据以一定的形式显示在网页上。简单来说,在列表视图ListView或详细视图DetailView的基础上增加日期筛选所实现的视图类●MonthArchiveView是在数据表筛选某个日期字段某年某月的所有的数据,默认以升......
  • 2023-06-03:redis中pipeline有什么好处,为什么要用 pipeline?
    2023-06-03:redis中pipeline有什么好处,为什么要用pipeline?答案2023-06-03:Redis客户端执行一条命令通常包括以下四个阶段:1.发送命令:客户端将要执行的命令发送到Redis服务器。2.命令排队:Redis服务器将收到的命令放入队列中,按照先进先出(FIFO)的原则等待执行。3.命令执行:当Redis服务器轮......
  • 文心一言 VS 讯飞星火 VS chatgpt (30)-- 算法导论5.2 2题
    二、在HIRE-ASSISTANT中,假设应聘者以随机顺序出现,你正好雇用两次的概率是多少?文心一言:我们可以先计算出在HIRE-ASSISTANT中,雇佣一个应聘者的概率为3/4,然后计算出雇佣两次应聘者的概率为3/4*3/4*2。已知在HIRE-ASSISTANT中,雇佣一个应聘者的概率为:0.75根据概率乘法原理,可计算出......
  • 文心一言 VS 讯飞星火 VS chatgpt (30)-- 算法导论5.2 2题
    二、在HIRE-ASSISTANT中,假设应聘者以随机顺序出现,你正好雇用两次的概率是多少?文心一言:我们可以先计算出在HIRE-ASSISTANT中,雇佣一个应聘者的概率为3/4,然后计算出雇佣两次应聘者的概率为3/4*3/4*2。已知在HIRE-ASSISTANT中,雇佣一个应聘者的概率为:0.75根据概率乘法原理,可......