PHP中的两种比较符号:‘==’和‘===’
- ==:先将字符串类型转化为相同再进行比较
- ===:先判断两种字符串的类型是否相同再比较
当字符串和数字比较使用==时,先将字符串转化为数字类型再进行比较。
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
Comments | NOTHING