PHP弱类型

本文介绍了PHP的弱类型特性,特别是其在比较操作符中的表现,如松散比较`==`和严格比较`===`。通过实战案例,展示了如何利用弱类型进行md5绕过和json解码绕过,强调了这些特性在安全领域的潜在风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,而绝对等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值