PHP弱类型比较

发布于 2023-09-15  285 次阅读


PHP中的两种比较符号:‘==’和‘===’

  1. ==:先将字符串类型转化为相同再进行比较
  2. ===:先判断两种字符串的类型是否相同再比较

当字符串和数字比较使用==时,先将字符串转化为数字类型再进行比较。

var_dump('a' == 0);    //true 在这种情况下a字符串转化为数字,因为a字符串的开头不存在数字,因此其被转换为0。
var_dump('123a' == 123);   //true 在这种情况下123a字符串转换为数字123,所以在==中返回true
var_dump('a123' == 123);   //false 因为php中存在一个相关规定:字符串的开始部分决定了它的值,如果该字符串以合法的数字开始,则使用该数字至最后一个数字结束,否则其比较的整体值为0.
var_dump('123a1' == 123);   //true
var_dump('1233a' == 123);   //false

同理:<,>,<=,>=存在和==相同的弱类型,原理相同。

PHP中ereg()函数漏洞

ereg()函数是用于指定的模式搜索一个字符串中指定的字符串,如果匹配成功就返回true,否则返回false。其中,该搜索是大小写敏感的。

ereg函数可以用来限制password的格式,只能是数字或者是字母,但是存在NULL截断漏洞,可以使用%00进行绕过验证。

①%00截断及遇到%00则默认字符串的结束

②当ntf为数组时,其返回值不是FALSE


一花一世界,一叶一菩提。