php弱类型的研究

关于php弱类型的研究,若遇到新的会加上

比较时的类型转换

当一个字符串被当作数值,没有’.’,‘e’,‘E’,且数值在整型范围,则被当作整型,否则为float,由字符串开头决定,有数字则为那个数字,没有则为0

在这里插入图片描述


0e这类字符串解析为科学计数法

在这里插入图片描述

利用:哈希函数弱比较https://blog.csdn.net/nzjdsds/article/details/90085112


0x的数字开头会被认为16进制

在这里插入图片描述


switch()

case是数字判断时会转换为int类型,与第一种相似
在这里插入图片描述


strcmp()

比较两个字符串但是用一个数组和字符串比较时返回NULL,也就是0
在这里插入图片描述


sha1()

if (isset($_GET['a']) and isset($_GET['b']))

{
    if ($_GET['a'] == $_GET['b'])

        echo 'sb';
    else if (sha1($_GET['a']) === sha1($_GET['b']))

        echo '666';
    else
        echo 'sb';
}
else
    echo 'sb'; //传入数组

在这里插入图片描述


md5

第一种:数组绕过

if ($_GET['a']!==$_GET['b'] && md5($_GET['a'])===md5($_GET['b'])) 
    echo "666";//传入数组

在这里插入图片描述

第二种:0e绕过

if ($_GET['a']!==$_GET['b'] && md5($_GET['a'])==md5($_GET['b']))
    echo "666";//等号数量和上一个不相同,注意看,,,
    哈希函数弱比较https://blog.csdn.net/nzjdsds/article/details/90085112

在这里插入图片描述

第三种:强碰撞(无数组)

if ((string)$_GET['a']!==(string)$_GET['b'] && md5($_GET['a'])===md5($_GET['b']))
    echo "666";//传入数组会被转换为'Array',传入a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

在这里插入图片描述

这是安洵杯的一个题 [安洵杯 2019]easy_web


in_array()

与==类似

在这里插入图片描述


array_search()

对类型强制转换

if(!is_array($_GET['a']))
{
    echo 'sb';
    exit();
}//必须是数组
$a=$_GET['a'];
for($i=0;$i<count($a);$i++){
    if($a[$i]==="admin"){
        echo "sb";
        exit();
    }//数组内不能有admin
    $a[$i]=intval($a[$i]);
}
if(array_search("admin",$a)===0){
    echo "666";
}  //判断
else{
    echo "sb";
}//传入a[]=0,结果转换相当于"admin"==0

在这里插入图片描述


数组特性

数组和任意数比较的时候会大于那个数,但是转化为整型为1

在这里插入图片描述


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值