一些弱类型的编程语言普遍都有 == 、 ===之类的比较运算符,
当你想要比较可能包含等于
但可能具有不同类型的值的变量时,==它很有用。
例如:
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