当前位置: 首页 > news >正文

合肥定制网站建设公司网站为什么要seo

合肥定制网站建设公司,网站为什么要seo,专业网站建设办公,中国建筑装饰网上海正则绕过 正则表达式PHP正则回溯PHP中的NULL和false回溯案例案例1案例2 正则表达式 在正则中有许多特殊的字符,不能直接使用,需要使用转义符\。如:$,(,),*,,.,?,[,,^,{。 这里大家会有疑问:为啥小括号(),这个就需要两个来转义&a…

正则绕过

  • 正则表达式
  • PHP正则回溯
  • PHP中的NULL和false
  • 回溯案例
    • 案例1
    • 案例2

正则表达式

在正则中有许多特殊的字符,不能直接使用,需要使用转义符\。如:$,(,),*,+,.,?,[,,^,{。
这里大家会有疑问:为啥小括号(),这个就需要两个来转义,但是中括号[]和大括号{}仅转义左侧。这样的原因是,()存在一个特殊含义:组,而中括号和大括号,没有左侧就无法实现闭合,也就无法编译。
当然里面也存在一个特殊符号“-”,也是不需要转义的,起到连接符的作用,主要使用在[]中,当做普通文本即可。

除了一些特殊字符,还有一些特殊符号的表示,像:\d,\D,\s,\S,\w,\W,\b,\B。

还存在一些机制,像贪婪匹配,惰性匹配,又比如存在断言,像:先行肯定断言、先行否定断言。这里就不多说了。

PHP正则回溯

回溯,可以简单理解为返回,也就是在正则匹配时,依次匹配,如果产生不满足正则表达式的情况,则向前依次返回搜索,知道匹配到为止,否则,正则无法匹配。
举个例子:
匹配正则:/\d.*g.*/gm
正则表达的含义:首先匹配\d,也就是先数字匹配,然后是.*,全部匹配,匹配字母g,再全部匹配。
我们的案例给这个:1234as23gsfggsw,正常理解应该2步差不多了。
我们在regex101.com查看一下具体匹配了几步。
在这里插入图片描述
这里匹配了八步。
看一下第三步:
在这里插入图片描述
和我们想的差不多基本已经匹配完了,但是这个正则没有走完,也就是说它回去匹配字母g,再来看一下后面两步。
在这里插入图片描述
在这里插入图片描述
开始了我们前面提到的回溯,开始从后往前匹配内容,也就是字母g,在匹配到后,就会再向后匹配正则表达式。

在PHP中,回溯不是无限的,也就是说回溯步数是有限制的,根据英文文档显示可以回溯1000000次,这是一个很大的数字。

PHP中的NULL和false

作为弱数据型语言,php的比较还是比较特殊的。
PHP存在严格比较和松散比较。严格比较也就是“===”,松散比较“==”。
松散比较,比较的仅是数据的值。
严格比较,比较的是数据的值和类型。
PHP下,也存在一些隐式转换,将NULL和false进行转换
下面就展示一下NULL和false的比较

0 == false: bool(true)
0 === false: bool(false)0 == null: bool(true)
0 === null: bool(false)false == null: bool(true)
false === null: bool(false)"0" == false: bool(true)
"0" === false: bool(false)"0" == null: bool(false)
"0" === null: bool(false)"" == false: bool(true)
"" === false: bool(false)"" == null: bool(true)
"" === null: bool(false)

很明显,在严格模式下,NULL和false相同。

回溯案例

案例1

<?php
function areyouok($greeting){return preg_match('/Merry.*Christmas/is',$greeting); //正则匹配
}if(!areyouok($greeting)){if(strpos($greeting,'Merry Christmas') !== false){   echo 'welcome to nanhang. '.'flag{i_Lov3_NanHang_everyThing}';}else{echo 'Do you know .swp file?';}
}else{echo 'Do you know PHP?';
}

分析一下内容:首先第一个函数里面是一个正则匹配,正则匹配的内容是:Merry,然后任意字符,然后是Christmas。
来到下面的判断,先判断是否符合上面的正则,不符合,进入下一层,否则返回打印,然后,又判断。
这里有意思的两个点是在判断上,第一个判断是否符合正则,正则则是一个字符串,不符合进入下一个,而下一个则判断字符串包不包含括号里的内容,还要和false进行严格比较。也就是说呢,要不是字符串,还要和false不完全等。
首先大家想到的是,第二个判断为true就好了,但如果满足的话,那就必须是字符串,但第一个判断已经否定了。

理论成立,但仍需要实测,
首先字符串
在这里插入图片描述

所以,这时候我们就要想到我们的NULL和false,它们两个在严格比较下是相等的。
那这样要如何解决,那greeting就不能为字符串,且要为NULL,数字就可以。
所以,greeting[]=123,就解决了。

案例2

<?php
function areyouok($greeting){return preg_match('/Merry.*Christmas/is',$greeting);
}$greeting=@$_POST['greeting'];
if(!is_array($greeting)){if(!areyouok($greeting)){if(strpos($greeting,'Merry Christmas') !== false){echo 'Merry Christmas. '.'flag{i_Lov3_NanHang_everyThing}';}else{echo 'Do you know .swp file?';}}else{echo 'Do you know PHP?';}
} else {echo 'fuck array!!!';
}
?>

这个案例是上面的升级版,在这里就没有办法,使用NULL,来实现绕过了,这里对数组也进行了判断,难度可见一斑。
但是我们要想到一个问题,如果我们无法匹配正则,那就绕过,不就可以了。
上面我们提到了,PHP也就只能回溯1000000次,多了就不行了,如果超了,正则就匹配失败,也是满足我们判断条件的,所以,我们只需要在字符串加一些不相干的内容,一直回溯,超过1000000次就可以了。
所以,此时的greeting=Merry Christmas + ‘a’*1000000。

http://www.khdw.cn/news/65197.html

相关文章:

  • html网站建设流程百度一下首页网页百度
  • 网站开发建设步骤聊城seo培训
  • 太仓做网站的 太仓网站seo快速优化技巧
  • 成都建设银行社会招聘网站百度客服在哪里找
  • 苏州网站设计都选苏州聚尚网络最新疫情最新情况
  • 网站开发网页上传和网页发布信息流优化师工作总结
  • 建网站算法网络整合营销方案
  • 饰品做商城网站模式英文seo实战派
  • 做网站优化的公司的宣传海报网络优化seo是什么工作
  • 做私服网站总是被攻击2345浏览器影视大全
  • 企业网站设计哪个好外贸网站seo优化
  • 三星官方网站贵阳百度快照优化排名
  • 做同城网站赚钱常用的五种网络营销工具
  • 网站做语音识别搜索引擎seo关键词优化
  • 公司做网站需准备资料网站建设哪家好公司
  • 嘉兴网站建设系统淘宝关键词查询工具哪个好
  • 2w网站建设模式win7优化工具
  • 做独立网站需要注意什么南京百度快照优化排名
  • wordpress添加支付宝打赏宝鸡seo优化公司
  • app官网seo外链资源
  • 给企业建设网站的意义怎么做属于自己的网站
  • 淄博网站制作服务推广seo点击软件哪个好用
  • 网站模式下做淘宝客上海服务政策调整
  • 网站建设 上性价比高seo排名
  • 公司做企业网站的必要性如何在百度上投放广告
  • 政府部门网站建设方案自助建站工具
  • 珠海市网站如何创建一个app平台
  • 建立网站公司如何创建个人网页
  • 信誉好的天津网站建设企业管理培训免费课程
  • DW怎么做网站下拉菜单第三方营销策划公司有哪些