通常秘密在使用express-session的節點應用程式中是硬編碼的,例如 -
const session = require("express-session")
let RedisStore = require("connect-redis")(session)
const { createClient } = require("redis")
let redisClient = createClient({ legacyMode: true })
redisClient.connect().catch(console.error)
app.use(
session({
store: new RedisStore({ client: redisClient }),
saveUninitialized: false,
secret: "keyboard cat",
resave: false,
})
)
顯然,我可以keyboard cat通過編輯源代碼并重新啟動節點腳本來更改這個秘密。可以在應用程式仍在運行時更改它嗎?
uj5u.com熱心網友回復:
據我所知,沒有記錄在案的方法可以更改一組正在運行的快速會話中間件的秘密。我可以想到幾種“黑客”方法,它們可以進行足夠的除錯偵查以深入到 express-session 代碼中的正確私有資料結構,或者向 express-session 添加新方法以更改秘密或禁用原始會話中間件并安裝具有新秘密的新會話中間件。
但是,這會破壞任何現有的活動會話(因為它們所基于的 cookie 是使用原始密鑰加密的),所以這可能不是一個實際的選擇。
我的動機是我將大部分代碼放在 github 上,并且我不喜歡硬編碼任何密碼或秘密。
如果這是您的動機,那么通常您會將會話保密部分作為某些配置/部署檔案的一部分,該檔案未檢入 github 并單獨管理。這與您放置服務器所需的資料庫密碼和其他憑據的組態檔型別相同。這樣,當您的服務器啟動時,它會從未存盤在 github 中的本地組態檔中獲取所需的憑據/秘密。
然后,您也不必嘗試動態更改正在運行的會話中間件密碼。
既然您提到了 Heroku,以下是 Heroku 提到的用于管理配置變數的技術:
https://devcenter.heroku.com/articles/config-vars
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/444648.html
上一篇:為什么當我重新加載頁面時我的點擊按鈕正在上傳喜歡的數量
下一篇:如何找到有條件的?
