摘要:在比較兩個字符串,無論它們是否相等,函數的時間消耗是恒定的,可以用來防止時序攻擊。
引言
最近,在 Hacker News 上有一篇帖子(https://news.ycombinator.com/item?id=9484757),提到了一種探測網站密碼加密方式的方法。
結果都是:
bool(true) bool(true) bool(true)如果在一個網站,使用240610708作為密碼,然后用QNKCDZO登陸,結果可以登錄的話,說明密碼是以MD5方式保存的。類似的,如果用aaroZmOk作為密碼,然后用aaK1STfY登陸,結果可以登錄的話,說明密碼是以sha1方式保存的。第三種當然就是明文存儲了。
分析以第一組數為例:
md5("240610708") 的結果是:0e462097431906509019562988736854 md5("QNKCDZO") 的結果是:0e830400451993494058024219903391由于 PHP 是弱類型語言,在使用 == 號時,如果比較一個數字和字符串或者比較涉及到數字內容的字符串,則字符串會被轉換為數值并且比較按照數值來進行。此規則也適用于 switch 語句。上述例子中的兩個字符串恰好以 0e 的科學記數法開頭,字符串被隱式轉換為浮點數,實際上也就等效于 0×10^0 ,因此比較起來是相等的。
類似第一個返回的是 true,第二個返回的是 false
結論PHP中的Hash校驗,應該使用“===”,而不應該使用“==”。另外如果生產環境版本足夠高的話(PHP >= 5.6.0),最好使用 hash_equals() 函數。
hash_equals() 在比較兩個字符串,無論它們是否相等,函數的時間消耗是恒定的,可以用來防止時序攻擊。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30246.html
摘要:后端知識點總結服務器服務器的作用接收客戶端的請求,查找需要的數據文件數據庫其它系統,發送回客戶端。注意默認情況下,若判定了某個相等條件則執行該條件以及后續所有條件中的執行語句必須配合關鍵字使用。 后端知識點總結——PHP 1.Web服務器 Web服務器的作用:接收客戶端(PC/PAD/PHONE)的請求,查找需要的數據(文件/數據庫/其它系統),發送回客戶端。 Web服務器分為兩種:...
摘要:后端知識點總結服務器服務器的作用接收客戶端的請求,查找需要的數據文件數據庫其它系統,發送回客戶端。注意默認情況下,若判定了某個相等條件則執行該條件以及后續所有條件中的執行語句必須配合關鍵字使用。 后端知識點總結——PHP 1.Web服務器 Web服務器的作用:接收客戶端(PC/PAD/PHONE)的請求,查找需要的數據(文件/數據庫/其它系統),發送回客戶端。 Web服務器分為兩種:...
本篇文章主要是講述在JavaScript中判斷兩個值相等,不要認為很簡單,要注意的是在JavaScript中存在4種不同的相等邏輯。 ECMAScript 是 JavaScript 的語言規范,在ECMAScript 規范中存在四種相等算法,如下圖所示: 上圖中每個依次寫下來,很多前端應該熟悉嚴格相等和非嚴格相等,但對于同值零和同值卻不熟悉,現在就依次下面四種方法。 同值 同值零 非...
摘要:雖然你可能很驚訝甚至可能懷疑是的但是這都是有語言自己的一個隱式類型轉換的套路。基本的隱式類型轉換基本類型的隱式轉換這個其實我們使用的最多例如結果返回的是而不是這就是類型的隱式轉換。 基本上所有的語言都有 隱式類型轉換 ,但是對于 弱類型語言(JS) 來說 ,隱式類型轉換會比 強類型語言(Java) 帶來更大的副作用,有些行為甚至是不可思議的。雖然你可能很驚訝 ,甚至可能懷疑是 JS 的...
閱讀 2826·2021-11-25 09:43
閱讀 978·2021-10-11 10:57
閱讀 2477·2020-12-03 17:20
閱讀 3716·2019-08-30 14:05
閱讀 2422·2019-08-29 14:00
閱讀 1991·2019-08-29 12:37
閱讀 1661·2019-08-26 11:34
閱讀 3201·2019-08-26 10:27