0 追蹤者

密碼學

在本節中,我們將回顧以下安全性方面

  • 產生隨機資料
  • 加密與解密
  • 確認資料完整性

產生偽隨機資料

偽隨機資料在許多情況下都很有用。例如,當透過電子郵件重設密碼時,您需要產生一個令牌,將其儲存到資料庫,並透過電子郵件發送給終端使用者,以便他們證明該帳戶的所有權。這個令牌必須是唯一且難以猜測的,否則攻擊者有可能預測令牌的值並重設使用者的密碼。

Yii 安全性助手讓產生偽隨機資料變得簡單

$key = Yii::$app->getSecurity()->generateRandomString();

加密與解密

Yii 提供了方便的助手函數,讓您可以使用密鑰加密/解密資料。資料會通過加密函數處理,以便只有擁有密鑰的人才能解密它。例如,我們需要將一些資訊儲存在資料庫中,但需要確保只有擁有密鑰的使用者才能查看它(即使應用程式資料庫被入侵)

// $data and $secretKey are obtained from the form
$encryptedData = Yii::$app->getSecurity()->encryptByPassword($data, $secretKey);
// store $encryptedData to database

隨後,當使用者想要讀取資料時

// $secretKey is obtained from user input, $encryptedData is from the database
$data = Yii::$app->getSecurity()->decryptByPassword($encryptedData, $secretKey);

也可以透過 yii\base\Security::encryptByKey()yii\base\Security::decryptByKey() 使用密鑰而不是密碼。

確認資料完整性

在某些情況下,您需要驗證您的資料是否未被第三方篡改,甚至以某種方式損壞。Yii 提供了以兩個助手函數形式輕鬆確認資料完整性的方法。

使用從密鑰和資料產生的雜湊值作為資料的前綴

// $secretKey our application or user secret, $genuineData obtained from a reliable source
$data = Yii::$app->getSecurity()->hashData($genuineData, $secretKey);

檢查資料完整性是否已受損

// $secretKey our application or user secret, $data obtained from an unreliable source
$data = Yii::$app->getSecurity()->validateData($data, $secretKey);

發現錯字或您認為此頁面需要改進?
在 github 上編輯 !