攻防世界-simple_php

image.png

题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。

题目虽然是不难,我们做题的目的是为了总结知识点。下面的php弱类型比较的知识点都是多位大佬总结的,真香。

 

php有两种比较的符号 == 与===

=== :在进行比较的时候,会判断两种字符串的类型是否相等,再比较。

== :在进行比较的时候,会先将字符串类型转成相同,在进行比较

==如果比较一个数字和字符串,或者比较涉及到数字内容的字符串,则字符串会被转换成数值,并且比较的方式会按照数值进行。

 

代码示例:

<?php
var_dump("admin"===0);  //bool(false)  ===:字符串不能和数字比较,所以错
var_dump("admin"==0);   //bool(true) admin转换为0
var_dump("1admin"==1);  // bool(true)     1admin转换为1
var_dump("admin1"==1);  //bool(false) admin1转换为0
var_dump("admin1"==0);  //bool(true) admin1转换为0
var_dump("0e123456"=="0e4456789");  //bool(true) 0e:为科学计算法, 0的多少次方都为0,所以正确

?>

 

1 观察上述代码,"admin"==0 比较的时候,会将admin转化成数值,强制转化,由于admin是字符串,转化的结果是0自然和0相等

2 "1admin"==1 比较的时候会将1admin转化成数值,结果为1,而“admin1“==1 却等于错误,也就是"admin1"被转化成了0,为什么呢??

3 "0e123456"=="0e456789"相互比较的时候,会将0e这类字符串识别为科学技术法的数字,0的无论多少次方都是零,所以相等

问题2的答案

当一个字符串欸当作一个数值来取值,其结果和类型如下:如果该字符串没有包含'.','e','E'并且其数值值在整形的范围之内

该字符串被当作int来取值,其他所有情况下都被作为float来取值,该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0

 

注:<、>、<=、>=都存在和==相同的弱类型,原理相同!!!

var_dump:是PHP中的调试函数,用于判断一个变量的类型与长度,并输出变量的数值。可以用var_dump打印所有的对象,查看对象内部的数据结构。

 

解:

既然前置知识已经学完,就开始解题了。我们首先来分析一下代码。。。感觉回到以前做数学题的时候了。。。。

<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){
   echo $flag1;
}
if(is_numeric($b)){
   exit();
}
if($b>1234){
   echo $flag2;
}
?>

(1)include("config.php"); 文件包含,使用include函数包含了config.php文件

(2)$a=@$_GET['a']; $b=@$_GET['b']; url可以接受a,b参数的值

(3)if($a==0 and $a) :如果a等于0和$a, 得到flag1。 所以a可以输入任意的纯字母,也可以字母加数字,但是数字不能在第一个,参考上面问题2。

(4)if(is_numeric($b)) : 如果b为纯数字,就会退出,所以b不能为 纯数字

(5)if($b>1234) : 只要b大于1234,就可以得到flag2,并且b不能为纯数字,所以,可以使用一个大于1234的数字加字母组成

结论:a输入任意的纯字母,b使用一个大于1234的数字加字母组成

 

最后得到flag

image.png

Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}

 

参考链接:

https://blog.csdn.net/qq_41617034/article/details/91847131

https://www.cnblogs.com/Mrsm1th/p/6745532.html

 

声明:

本文仅限于大家技术交流和学习,严谨读者利用本博客的所有知识点进行非法操作。如果你利用文章中介绍的技术对他人造成损失,后果由您自行承担,感谢您的配合,

作者创作不容易,请大家点赞支持一下。谢谢各位读者大老爷。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值