iT邦幫忙

2022 iThome 鐵人賽

DAY 21
1
Modern Web

Laravel 9 漫遊,享受魔法般的極速網頁開發體驗系列 第 21

Day 21:Laravel 9 的密碼處理:Hash::make()

  • 分享至 

  • xImage
  •  

上次提到了密碼重設,可能有些對資安比較重視的讀者會感到好奇:那麼 Laravel 是怎麼處理我們的密碼呢?對密碼的保存方式是否足夠安全?

今天,我們就來看看 Laravel 是怎麼處理我們的密碼!

由於用戶可能會在不同的網站內使用同一組密碼,所以我們要避免密碼存在資料庫時,如果不小心外流的話,會造成嚴重的安全問題。所以一般來說,存在資料庫內的內容,會是雜湊(Hash)過後的字串。

有關密碼雜湊的部分,在昨天忘記密碼的處理上,其實已經有出現過了:

$user->forceFill([
	'password' => Hash::make($request->password),
	'remember_token' => Str::random(60),
])->save();

這邊的 Hash::make 就是協助我們處理雜湊的部分!

實際使用的演算法,則設置在 config/hashing.php 裡面

'driver' => 'bcrypt',

'bcrypt' => [  
    'rounds' => env('BCRYPT_ROUNDS', 10),  
],

這邊可以看到,是使用 bcrypt 這個演算法來進行密碼的加密。

這也是在 OWASP Password Storage Cheat Sheet 裡面提到過可用的演算法之一。

  • For legacy systems using bcrypt, use a work factor of 10 or more and with a password limit of 72 bytes.

透過 bcrypt 處理過後的密碼,看起來如下

$2y$10$sXFSmIZBYwaLB1swxrlh8OPcegpm7omsxf5zvi.exR.QpoG.00yja

前面的 $2y$ 是 PHP 的 PASSWORD_BCRYPT 固定會加上的字串。後面的 10 代表密碼處理的次數(rounds)。在後面就是密碼的雜湊了。值得注意的是,這邊已經自動的加上了 salt,所以即使是一樣的密碼,每次雜湊過後的結果都不會一樣。

如果覺得這個方式不夠安全,想換到 OWASP 建議的 Argon2,Laravel 也是支援的

'argon' => [
	'memory' => 65536,
	'threads' => 1,
	'time' => 4,
],

這邊可以調整記憶體用量、運作時使用的線程(thread) 數目等等參數。

要確認密碼是否正確,可以用 Hash::check()

if (Hash::check('plain-text', $hashedPassword)) {
}

今天有關 Laravel 處理密碼的介紹就到這邊,我們明天見!


上一篇
Day 20:Laravel 9 密碼重設功能
下一篇
Day 22:用 Laravel 來處理檔案!
系列文
Laravel 9 漫遊,享受魔法般的極速網頁開發體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
json_liang
iT邦研究生 5 級 ‧ 2022-09-22 00:14:14

hash 這個概念真的很重要!

我要留言

立即登入留言