溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中“==”的案例分析

發(fā)布時間:2020-11-05 14:22:40 來源:億速云 閱讀:168 作者:小新 欄目:編程語言

這篇文章主要介紹了PHP中“==”的案例分析,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

首先,看一下這段代碼。猜猜看結果會是什么

<?php
var_dump(md5('240610708') == md5('QNKCDZO'));
var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
var_dump('0010e2' == '1e3');
var_dump('0x1234Ab' == '1193131');
var_dump('0xABCdef' == ' 0xABCdef');
var_dump(0 == 'abcdefg');
var_dump(1 == '1abcdef');
?>

一眼看過,很明顯肯定都是false吧,但運行代碼后發(fā)現全是true!

WTF!

為什么會這樣?

開頭我已經說過了,PHP 是弱類型的語言。使用==對比兩個變量時,當有一個變量為整數,另外一個變量也會轉換為整數。這也就解釋了,為什么0 == 'abcdefg'和1 == '1abcdef'會成立。

但是,其他的代碼呢?字符串難道還會轉換?

PHP 手冊上為我們提供了解釋說明。

If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.

也就是說,如果你比較的兩個字符串涉及到數字(如:"0"),那么每個字符串都會轉換成數字。

在這里,我不得不說:PHP是最好的語言!

危害

當我們的網站是直接MD5或Sha1加密而沒有加鹽,碰巧某用戶密碼加密涉及到數字,那么就有可能被碰撞破解!

解決

1.在開發(fā)過程中盡可能避免使用==判斷兩個變量的值

2.密碼加密最好使用password_hash()或者加鹽md5($pwd.$salt)

感謝你能夠認真閱讀完這篇文章,希望小編分享PHP中“==”的案例分析內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI