以下介紹一些Laravel內部已建置,好用的安全性方法
Laravel 的加密服務提供一個簡單且方便的介面,可讓我們通過 OpenSSL 使用 AES-256 或 AES-128 加密方法來加解密文字。Laravel 中所有的加密資訊都使用訊息驗證碼 (MAC, Message Authentication Code) 簽名,因此一旦經過加密,底層的值將無法被修改或竄改。
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;
class DigitalOceanTokenController extends Controller
{
public function storeSecret(Request $request)
{
//將使用者傳過來的請求增加一個名為token的key,並儲存當中被加密的token在值當中
$request->user()->fill([
'token' => Crypt::encryptString($request->token),
])->save();
//將加密的token解密
Crypt::decryptString($encryptedValue);
}
}
?>
Laravel的Facades中的hash提供了安全的Bcrypt與Argon2雜湊,用以儲存使用者密碼。
<?php
// 預設使用Bcrypt
Hash::make($request->newPassword);
// 使用Bcrypt雜湊 設定salt的部分
Hash::make('password', ['rounds' => 12]);
// 使用Argon2雜湊
Hash::make('password', ['memory' => 1024,'time' => 2,'threads' => 2]);
// 驗證密碼是否符合雜湊
Hash::check('plain-text', $hashedPassword);
// 判斷密碼是否需要重新雜湊
Hash::needsRehash($hashed);
?>
資料來源:
https://docs.cornch.dev/zh-tw/laravel/9.x/encryption
https://docs.cornch.dev/zh-tw/laravel/9.x/hashing