各个函数

intval()

intval() 函数用于获取变量的整数值。
成功时返回 var 的 integer 值,失败时返回 0。 空的 array 返回 0,非空的 array 返回 1。

tips: 数组可以用于得到true。可以识别科学计数法。

in_array()

in_array ( mixed $needle , array $haystack , bool $strict = false ) : bool
在大海(haystack)中搜索针( needle),如果找到 needle 则返回 true,否则返回 false。

如未设置strict,则为弱比较。

gettext() / _()

在当前域中查找消息。

tips: 唯一一个有别名的函数。

ereg()

%00截断漏洞。

preg_match()

无法处理数组。

有回溯次数上限,PHP 为了防止正则表达式的拒绝服务攻击(reDOS),给 pcre设定了一个回溯次数上限 pcre.backtrack_limit。

回溯次数上限默认是 100 万。如果回溯次数超过了 100 万,preg_match 将不再返回非 1 和 0,而是 false。

md5()

无法处理数组。

sha1()

无法处理数组。

php特性

哈希值处理

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

常见0e开头的哈希值

1
2
3
4
5
6
7
8
9
10
11
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
sha1(str)
sha1('aaroZmOk')
sha1('aaK1STfY')
sha1('aaO8zKZF')
sha1('aa3OFF9m')

优先级问题

and 和 && 都表示逻辑与,or 和 || 都表示逻辑或,但是优先级不同,&& > ‘=’ > and,|| > ‘=’ > or。

tips: 注意and 和 = 的位置。

php原生类

ReflectionClass

可以显示出一个类的相关信息。

FilesystemIterator

可以获取指定目录下的所有文件。

字符串解析

php在解析查询字符串时,会删除空白符,或将某些字符转换为下划线(包括空格)

具体bypass看这

逻辑与或运算判断

对于“与”(&&) 运算: x && y 当x为false时,直接跳过,不执行y; 对于“或”(||) 运算 : x||y 当x为true时,直接跳过,不执行y。