PHP弱类型是什么
PHP作为最受欢迎的开源脚本语言,也被称为是世界上最好的语言,越来越多的应用于Web开发领域。
PHP属于弱类型语言,即定义变量的时候不用声明它是什么类型。作为一个程序员,弱类型确实给程序员书写代码带来了很大的便利,这一便利也是PHP语言的一个特性,但是在安全领域,特性即漏洞,这些特性在代码里面经常就是漏洞最容易出现的地方。
0x00 PHP比较操作符
php中有两种比较的符号:松散比较==(等于),
严格比较===(绝对等于)。
==比较时,会先把字符串类型转化成相同,再进行比较,比如说字符到数字,非bool类型到bool类型。一个字符串和数字比较时,会把字符串转化成数字再比较。PHP转换规则是:若字符串以数字开头,则以开头字母为转换结果,若无则输出0。当有一个对比参数是整数的时候,会把另外一个参数强制转换为整数。
<?php
var_dump("admin"==0); //true
var_dump("1admin"==1); //true
var_dump("admin1"==1) //false
var_dump("admin1"==0) //true
var_dump("0e123456"=="0e4456789"); //true
?>
观察上述代码,“admin”==0 比较的时候,会将admin转化成数值,强制转化,由于admin是字符串,转化的结果是0自然和0相等
“1admin”==1 比较的时候会将1admin转化成数值,结果为1,
而"admin1"被转化成了0,“0e123456”=="0e456789"相互比较的时候,
会将0e这类字符串识别为科学计数法的数字,0的无论多少次方都是零,所以相等。
===比较时,会先判断两种字符串类型是否相同,再比较。
例如,NULL,0,“0”,array()使用==与false比较时,都是true,而绝对等