渗透培训笔记:弱数据类型安全

admin 2023年11月7日14:33:02评论9 views字数 1289阅读4分17秒阅读模式

渗透培训笔记:弱数据类型安全

PHP是弱数据类型,所以学PHP对于很多人来说,易学,易用。PHP在使用双等号(==)判断的时候,不会严格检验传入的变量类型,同时在执行过程中可以将变量自由地进行转换类型。因为弱数据类型的特点,在使用双等号和一些函数时,会造成一定的安全隐患。

弱类型变量在使用过程中无须进行类型声明,数据类型根据代码执行情况可以动态变换。强类型指的是每个变量和对象都必须具有声明类型,它们是在编译时就确定了类型的数据,在执行时类型不能更改。

以下代码当用户输入type=0时,会直接进入支付逻辑。开发人员看到会哭。

<?php    $type = $_GET['type'];  if($type=='pay'){  //这里使用双等号进行判断        echo "这里是支付逻辑";    }else{        echo "这里是其他逻辑";    }


建议使用三个等号(===)来判断变量值与类型是否完全相等。修改代码后可以解决这个问题,防止用户传入type=0时执行支付逻辑。

<?php    $type = $_GET['type'];  if($type==='pay'){  //这里使用三个等号进行判断        echo "这里是支付逻辑";    }else{        echo "这里是其他逻辑";    }


使用PHP开发过程中,进行判断的时候,为了避免安全漏洞,特别注意弱类型机制的特性。下面是一些弱类型判断的示例,供大家参考。

<?php    var_dump(false == 0);   //执行结果bool(True)  var_dump(false == '');  //执行结果bool(True)  var_dump(false == '0'); //执行结果bool(True)  var_dump(0 == '0');     //执行结果bool(True)  var_dump(0 == '0xxx'); //执行结果bool(True)  var_dump(0 == 'xxx');  //执行结果bool(True)  //例如:    var_dump(0=='admin');  //执行结果bool(True)  var_dump(1=='1admin');  //执行结果bool(True)  var_dump('1'=='01');  //执行结果bool(True)  var_dump('a'=='1a');   //执行结果bool(False)


大家想进一步学习可以查看一下PHP官方文档的松散比较表。

弱数据类型在项目研发过程中,主要表现在Hash比较、bool比较、数字转换比较、switch比较、数组比较等几种比较方式,容易被忽视。

总结:

1.如果能转换成另一个比较的类型则进行转换。比如:'1admin'和1比较,'1admin'转换成整型。

2.如果是相同类型,并且都能转换成同一类型则进行转换,如'1'=='01'比较,都能转换成整型,那就全部转换为整型然后进行比较,最后就是1==01。

3.如果是相同类型,但不能转换成同一类型,如'a'=='1a',两者不能同时转换成整型,只能都当作字符串来比较。

渗透培训笔记:弱数据类型安全

渗透培训笔记:弱数据类型安全

衡阳信安,船山院士网络安全团队官方唯一公众号,欢迎大家进群交流学习!长期招募有情怀的成员,致力于有情怀的教学。

渗透培训笔记:弱数据类型安全

原文始发于微信公众号(衡阳信安):渗透培训笔记:弱数据类型安全

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年11月7日14:33:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透培训笔记:弱数据类型安全http://cn-sec.com/archives/2183583.html

发表评论

匿名网友 填写信息