当涉及到安全性时,我更喜欢使用===操作符. ===确保两个操作数完全相同,而不是尝试容纳一些投射,以便“帮助”比较以达成一个成功的比赛 – 在开发过程中可能有助于使用类似PHP的松散类型的语言.
当然,其中一个操作数是值得信赖的.数据库中的哈希值是可信赖的,而用户输入则不是.
可以随时抖动一段时间,得出结论,在具体情况下,没有使用==的风险.也许.但是例如
"0afd9f7b678fdefca" == 0 is true
"aafd9f7b678fdefca" == 0 is also true
因为PHP尝试将“哈希”转换为一个数字(可能使用的是atoi),这个数字为0.尽管crypt不太可能返回0,但我希望最大化密码不匹配的情况(并且回答支持呼叫)通过使用===,比允许一个罕见的情况,我没有想到使用==.
对于strcmp,如果不同,函数返回< 0或> 0,如果相等则返回0.但
strcmp("3", 0003) returns 0
strcmp("0003", 0003) returns -3
毕竟这并不奇怪.文字0003实际上是一个整数,3,由于strcmp需要一个字符串,所以3将被转换为“3”.但是这表明在这种情况下可能会发生一些转换,因为strcmp是一个函数,而===是语言的一部分.
所以我喜欢在这种情况下去===(这比==更快).