变量类型
- 标准类型:布尔型、整型、浮点、字符
- 复杂类型:数组、对象
- 特殊类型:资源
操作之间的比较
- 字符串与数字
- 字符串与数组
- 数字与数组
- 数字+e+数字
以上几点都包含在下面的代码中了:
<?php
# 字符串与数字
var_dump(0=="admin"); # True
var_dump(0=="1admin"); # False
var_dump(0=="admin1"); # True
# 字符串与数组
$arr = array();
var_dump("0"==$arr); # False
# 数字与数组
var_dump(0==$arr); # False
# xxexx
var_dump(0e123456==0e654321); # True
var_dump(1e1==10); # True
empty()与isset()
- 变量为:0,“0”,null,’’,false,array()时,使用empty函数,返回的都为True
- 变量未定义或者为null时,isset函数返回的都是faluse,其他都为true
<?php
$a = 0;
$b = null;
$c = '';
echo '<h2>empty</h2>';
var_dump(empty($a));
var_dump(empty($b));
var_dump(empty($c));
echo '<h2>isset</h2>';
var_dump(isset($a));
var_dump(isset($b));
var_dump(isset($c));
运行结果:
md5()
这个函数在CTF中还是比较常见的,一般就是一个if判断,两个用户可控的值传进来,经过md5()加密,对比加密后的结果,相等就输出flag,不等就终止程序。
<?php
error_reporting(0);
$arr1 = array('test1');
$arr2 = array('test2');
echo '<h1>数组绕过md5函数</h1>';
var_dump(md5($arr2)==md5($arr1));
echo '<h1>科学计数法绕过md5函数</h1>/';
var_dump(md5(QNKCDZO)==md5(s155964671a