zoukankan      html  css  js  c++  java
  • PHP代码审计_用==与===的区别


    背景介绍

    比较=====的差别

    == 是等于符号,=== 是恒等于符号,两个符号的功能都是用来比较两个变量是否相等的,只不过两个符号的比较维度不一样,导致各自的使用领域是不一样的。

    # 使用案例
    0==0
    返回true
    0=="0"
    返回true
    
    
    0===0
    返回true
    0==="0"
    返回flase
    
    # 总结
    === 比较两个变量的值和类型
    == 只比较两个变量的值
    那么就可以得出== 两个变量中的一个变量替换成别的类型就会有绕过的风险
    

    如何审计

    代码审计中先搜索哪个表达式里使用了==比较操作符,在跟踪其中的变量是否来之外部输入,如果是外部输入的,那就有绕过风险。

    绕过案例1

    <?php
    	header("Content-type: text/html; charset=utf-8"); 
    	$密码=000000;
    	$input="a中文"; # 外部输入的密码
    	if($密码==$input){
    		echo "密码正确!";
    	}else{
    		echo "密码错误!";
    	};
    ?>
    

    返回:密码正确!
    用=== 可以避免

    绕过案例2

    md5('240610708')==md5('QNKCDZO'); //True
    md5('240610708')===md5('QNKCDZO'); //False
    

    这篇文章对你有帮助吗?作为一名程序工程师,在评论区留下你的困惑或你的见解,大家一起来交流吧!
    微信公众号: Mysticbinary
    Github:https://github.com/Mysticbinary
    本文版权归作者所有,欢迎转载,但未经作者同意请保留此段声明,请在文章页面明显位置给出原文链接
    声明:本文章仅限于讨论网络安全技术,请勿用作任何非法用途,否则后果自负,本人和博客园不承担任何责任!
  • 相关阅读:
    应用部署架构演进【转载】
    TiDB 学习笔记一(运维管理)
    c++ strcmp函数
    C++ sort()函数
    C++ 遍历set的三种方式
    nvcc fatal : '--ptxas-options=-v': expected a number
    PAT A1039 Vector的使用
    C++ set
    C++ int与string互转换
    C++%f和%lf的区别
  • 原文地址:https://www.cnblogs.com/mysticbinary/p/12571275.html
Copyright © 2011-2022 走看看