首页 > 编程语言 >php弱类型比较与强类型比较

php弱类型比较与强类型比较

时间:2023-04-05 18:25:04浏览次数:25  
标签:false 数字 echo 空格 123 类型 php true 比较

一般容易把 == 与 !== 混淆,认为 !== 是 == 的取反

实际上

  • == 与 != 同属弱类型比较

  • ===与 !== 同属强类型比较

弱类型比较

$a==$b、$a!=$b

弱类型比较在比较之前会进行类型转换,再进行值的比较

特点(常用的绕过方式)

  • 含数字的字符串

    • 以数字开头的字符串,可以被字母、特殊字符、小数点截断的

      格式:数字+字母/特殊字符/小数点

    • 非数字开头的,含有数字的字符串被识别成0

#以数字开头的字符串或纯数字
#以下经过转换后都为123
echo 123=='123q'; 		#true,数字+字母
echo 123==123;			#true,纯数字
echo 123=='123';		#true,数字字符串
echo 123==123.2;		#true,浮点数
echo 123=='123.2';		#true,浮点数字符串
echo 123=='123@';		#true,数字+特殊字符


#其他进制,仅在纯数字时可以被识别
#若为数字字符串,会按照字符串转换数字的规则转换
echo 123==0x7b;			#true,十六进制纯数字
echo 123=='0x7b';		#false,十六进制数字字符串,被字母截断
echo 123==0173;			#true,八进制纯数字
echo 123=='0173';		#false,八进制数字字符串,八进制被转换为173
  • 弱类型比较只会无视前空格,ctf中常用%20、%09、%0a、%0b、%0c、%0d、%a0代替空格
var_dump(' 123'=='123');	#true,前空格与无空格
var_dump('123 '=='123');	#false,后空格与无空格

var_dump(' 123'=='123 ');	#false,前空格与后空格
var_dump('123 '==' 123');	#false,后空格与前空格

var_dump(' 123 '=='123');	#false,前后空格与无空格
var_dump(' 123 '==' 123');	#false,前后空格与前空格
var_dump(' 123 '=='123 ');	#false,前后空格与后空格

补充:intval()会无视前后空格,is_numeric()会无视前空格
  • 弱类型比较可以识别科学计数法(这一条常用于md5弱碰撞)
echo md5(QNKCDZO)==md5(240610708);  #true

#很明显,加密后都以0e开头,被识别成科学计数法
#而以0e开头的科学计数法都被识别成0
md5(QNKCDZO) 	#0e830400451993494058024219903391
md5(240610708) 	#0e462097431906509019562988736854

强类型比较

$a===$b、$a!==$b

强类型比较会比较 $a 与 $b 的值和类型是否相同,相对于弱比较,安全性大大提高

标签:false,数字,echo,空格,123,类型,php,true,比较
From: https://www.cnblogs.com/IFS-/p/17290199.html

相关文章

  • 使用benchmark比较循环嵌套与strassen求解矩阵乘法的性能
    #include<benchmark/benchmark.h>#include<iostream>#include<random>#include<vector>usingnamespacestd;staticconstintn=200;staticconstint_lrange=0;staticconstint_rrange=10;staticconstint_iter=1;us......
  • 《oracle马拉松》基础语法篇-字段类型
    常见字段类型原文链接:https://www.cnblogs.com/zhouweiye/p/3594268.html1.字符型CHAR型:定长字符串,短则用空格填充,长则出错。VARCHAR2型:变长字符串。字段长度根据实际字符串长度自动调整,不用空格填充。2.数值型NUMBER(PRECISION,SCALE)精度PRECISION指定所有数字位的个数,范......
  • java中如何灵活的比较日期大小
    java中如何灵活的比较日期时间大小 在比较两个日期时间的大小之前,我们先了解两个需要用到的类:Date和Calendar 1. Date类 java.util包提供了Date类来封装当前的日期和时间1publicstaticvoidmain(String[]args){2DatedNow=newDate();3......
  • 使用python读取指定目录下的指定类型文件
    准备工作:设置指定的路径,使用os.listdir()方法获取路径下所有的文件importospath="d:\\data"#设置路径dirs=os.listdir(path)#获取指定路径下的文件循环判断:使用os.path.splitext()方法筛选出指定类型的文件foriin......
  • PHP初学体会
     近来,闲来无事,把去年买的《PHP开发实战权威指南》通读1遍和精读1遍。总体感觉,不是很难。相比,C/C++/Java要简单许多,可能是因为已经学习过好几门语言了,所以理解起来相对比较轻松。IDE使用的是WampServer,安装之后,把php文件放进去,就可以通过url直接访问了。不需要编译,能立即看到效果......
  • 注释/关键字/常量/数据类型/变量/标识符/类型转换
                                        ......
  • Swift中让值类型以引用方式传递
    Swift中让值类型以引用方式传递在Swift众多数据类型中,只有class是引用类型,其余的如Int、Float、Bool、Character、Array、Set、enum、struct全都是值类型.有时候我们需要通过一个函数改变函数外面变量的值(将一个值类型参数以引用方式传递),这时,Swift提供的inout关键......
  • Ioc配置——集合类型的数据注入
    importcom.hw.dao.UserDao;importcom.hw.service.UserService;publicclassUserServiceImplimplementsUserService{privateUserDaouserDao;publicvoidsetUserDao(UserDaouserDao){this.userDao=userDao;}@Overridepubl......
  • wdcp面板php版本升级为5.3
    cd/tmpwget-chttp://dl.wdlinux.cn:5180/soft/php-5.3.10.tar.gztarzxvfphp-5.3.10.tar.gzcdphp-5.3.10./configure--prefix=/www/wdlinux/php-5.3.10--with-config-file-path=/www/wdlinux/etc--with-mysql=/www/wdlinux/mysql--with-iconv=/usr--with-freetype-d......
  • js dom 类型判断
    Node对象中的nodeName获取指定节点的节点名称(返回的是大写字母表示的)Node对象中的nodeType获取指定节点的节点类型元素节点属性节点文本节点123Node对象中的nodeValue获取指定节点的值详情见官网:https://developer.mozilla.org/......