Laravel 發布新的安全更新 5.6.30 並建議所有使用者立刻升級,希望中文文件也儘快更新
原文參考 Upgrade Guide
從 5.6 升級到 5.6.30(安全更新)
Laravel 5.6.30 是一個安全更新,並且建議所有使用者立即升級。Laravel 5.6.30 同時也包含對 cookie 加密及序列化的破壞式改變,所以請務必小心遵守以下指示進行升級。
這個漏洞僅會在你的應用程式加密金鑰(APP_KEY
環境變數)被有心人士取得時被利用。通常來說,你應用程式的使用者不可能取得這個金鑰。然而,已經有金鑰存取權的前員工可能會利用這個金鑰來攻擊你的應用程式。如果你已經有理由確信你的加密金鑰被有心人士取得,你 必須 將這個金鑰替換成新的。
Cookie 序列化
Laravel 5.6.30 禁止所有對 cookie 的序列化 / 反序列化。自從 Laravel 所有的 cookies 被加密和簽署,cookie 的值通常不會被客戶端竄改。然而,如果你應用程式的加密金鑰在有心人士手上,他可能會破解 cookie 的值,並利用這個漏洞來繼承 PHP object 序列化 / 反序列化,並呼叫你應用程式裡任意物件的方法
禁止所有 cookie 的序列化會將你應用程式裡所有的 sessions 無效化,並且所有使用者必須重新登入應用程式。此外,應用程式裡任何其他已加密的 cookies 都會變成無效值。因為這個原因,你可能會希望添加額外的邏輯來驗證客製化的 cookie 值符合預期;否則,你應該放棄他們。
設定 Cookie 序列化
因為這個漏洞無法在沒有加密金鑰的情況下被利用,當你想讓應用程式能兼容這些變化時,我們選擇提供一個方法來重新開啟加密過的序列化 cookie。為了開啟 / 關閉 cookie 序列化,你需要改變 App\Http\Middleware\EncryptCookies
中間件 裡的靜態屬性 serialize
:
/**
* 表明 cookies 是否需要序列化
*
* @var bool
*/
protected static $serialize = true;
注意: 當 cookie 序列化被開啟時,如果有心人士擁有加密金鑰的存取權,你的應用程式可能會容易遭受攻擊。如果你已經確信金鑰被有心人士取得,你應該在開啟序列化已加密 cookie 前將金鑰替換。
Dusk 4.0.0
Dusk 4.0.0 已經發布,並且不會序列化 cookies。如果你選擇開啟 cookie 序列化,你應該繼續使用 Dusk 3.0.0。否則,你應該升級到 4.0.0。
Passport 6.0.7
Passport 6.0.7 已經跟著一個新的方法 Laravel\Passport\Passport::withoutCookieSerialization()
被發布。一旦你已經關閉 cookie 序列化,你應該在你應用程式的 AppServiceProvider
裡呼叫這個方法。
推荐文章: