前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络安全自学篇-PHP代码审计(二)

网络安全自学篇-PHP代码审计(二)

作者头像
字节脉搏实验室
发布2020-07-01 14:45:45
7200
发布2020-07-01 14:45:45
举报

认识函数

一、字符串操作函数

1、查找

2、截取

3、替换

4、分割

正则

一、最左原则(非贪婪模式):正则表达式总是从目标字符串的最左侧开始,依次匹配,直到匹配到符合表达式要求的部分,或直到匹配目标字符串的结束 二、最长原则(贪婪模式):对于匹配到的目标字符串,正则表达式总是会匹配到符合正则表达式要求的最长的部分 首先从分隔符开始,常用包括/,#,~,用于表明一串正则的开始,如/a.*a/,当表达式有过多转义字符时,建议先用 #,如url链接

\d匹配一个数字字符。等价于 [0-9]。

\D匹配一个非数字字符。等价于 [^0-9]。

\f匹配一个换页符。等价于 \x0c 和 \cL。

\n匹配一个换行符。等价于 \x0a 和 \cJ。

\r匹配一个回车符。等价于 \x0d 和 \cM。

\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\t匹配一个制表符。等价于 \x09 和 \cI。

\v匹配一个垂直制表符。等价于 \x0b 和 \cK。

\w匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。

\W匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。

\xn匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,’\x41’ 匹配 “A”。’\x041’ 则等价于 ‘\x04’ & “1”。正则表达式中可以使用 ASCII 编码。

\nm标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 • \nm 将匹配八进制转义值 nm。

\nml如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。

\un十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号(?)。

.匹配除 “\n” 之外的任何单个字符

匹配输入字符串的开始位置。在字符域[]中表示取反,如’[\w]‘等于’\w’;而^\w表示以单词字符开头。

KaTeX parse error: Undefined control sequence: \w at position 16: 匹配输入字符串的结束位置。例'\̲w̲‘表示以单词字符结尾。

?匹配前面的子表达式零次或一次 等价于 {0,1},例如,“do(es)?” 可以匹配 “do” 或 “does”。

匹配前面的子表达式零次或多次,等价于{0,}。例如,zo 能匹配 “z” 、 “zo”、‘zoo’。

+匹配前面的子表达式一次或多次,等价于{1,}例如,‘zo+’ 能匹配 “zo” 以及 “zoo”。

{n}n 为非负整数,匹配确定的n次。例如,‘o{2}’ 不能匹配 “Bob” 或‘Booob’,但是能匹配 “food” 中的两个 o。

{n,}n 为非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。

{n,m}m和n均为非负整数,其中n<= m。最少匹配n次且最多匹配m次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

[]字符集合(字符域)。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。

()匹配 ()内的内容 并获取这一匹配。搭配\n(n为大于1的整数),‘http://baidu.com’若表达式:'(\w+) (:)\/\/.*\1’则匹配‘http://baidu.comhttp',\1表示http。

(?:)匹配不获取匹配结果,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式。上面表达式若改为'(?:\w+)(:)\/\/.*\1',则\1表示为:

| x|y,匹配 x 或 y。例如,‘z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。

[-] 字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。

(?=pattern)正 向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹 配不需要获取供以后使用。例如,‘Windows (?=95|98|NT|2000)’ 能匹配 “Windows 2000” 中的 “Windows” ,但不能匹配 “Windows 3.1” 中的 “Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹 配的搜索,而不是从包含预查的字符之后开始。

(?!pattern)负 向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不 需要获取供以后使用。例如’Windows (?!95|98|NT|2000)’ 能匹配 “Windows 3.1” 中的 “Windows”,但不能匹配 “Windows 2000” 中的 “Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜 索,而不是从包含预查的字符之后开始

有时候最后定界符会有一个字母,如‘/as.*/i’,那这个i又是什么呢,这就是模式修正符;

i表示在和模式进行匹配进不区分大小写

m将模式视为多行,使用^和$表示任何一行都可以以正则表达式开始或结束

s如果没有使用这个模式修正符号,元字符中的"."默认不能表示换行符号,将字符串视为单行

x表示模式中的空白忽略不计

e正则表达式必须使用在preg_replace替换字符串的函数中时才可以使用(讲这个函数时再说)

A以模式字符串开头,相当于元字符^

Z以模式字符串结尾,相当于元字符$

U

数组

类 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。

对象 − 是类的实例。

成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。

成员函数 − 定义在类的内部,可用于访问对象的数据。

继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。

子类 − 一个类继承其他类称为子类,也可称为派生类。

多态 − 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

抽象性 − 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。

构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 字节脉搏实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档