在本節中,我們將回顧以下安全性方面
偽隨機資料在許多情況下都很有用。例如,當透過電子郵件重設密碼時,您需要產生一個令牌,將其儲存到資料庫,並透過電子郵件發送給終端使用者,以便他們證明該帳戶的所有權。這個令牌必須是唯一且難以猜測的,否則攻擊者有可能預測令牌的值並重設使用者的密碼。
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 上編輯 !
如果您將此資料作為表單中的隱藏欄位傳遞,然後再檢查它,請在 encryptByPassword 和 decryptByPassword 之上使用 StringHelper::base64UrlEncode 和 StringHelper::base64UrlDecode 函數。否則,字串將無法正確傳回,並且 decryptByPassword 將產生 "false" 值。
註冊 或 登入 以發表評論。