一些弱类型的编程语言普遍都有 == 、 ===之类的比较运算符,
当你想要比较可能包含等于可能具有不同类型的值的变量时,==它很有用。

例如:

var x = 10;
var y = '10';
console.log(x == y)  // true
console.log(x === y) // false

双等和三等区别

定义:
== 只比较两个变量的值;
=== 比较两个变量的值、还有类型;

记忆 :
弱类型语言的=== 有可能是借鉴了数学符号全等 ≌ 、≡ 。
在java(强类型)中 == 就是全等了,因为用==比较不同类型的值时,直接报错了,并且无法执行!

风险:
在某些场景下, 由于双等判断只比较值,那么判断的变量有替换成别的类型也能true, 就会有绕过的风险。

编写代码时需要的考虑:
代码的表达式里如果使用了==比较操作符,表达式里某个变量如果来自外部输入,需要根据代码上下文判断是否有安全风险、绕过风险。

Example 1 —— int 和 string 类型

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

out: 密码正确!

Example 2 —— md5绕过

md5('240610708')==md5('QNKCDZO'); //True
md5('240610708')===md5('QNKCDZO'); //False
posted on 2021-02-25 16:18  Mysticbinary  阅读(192)  评论(2编辑  收藏  举报