簡體   English   中英

將密碼和用戶名存儲在服務器的 .env 文件中以驗證管理員 API 端點是否“安全”?

[英]Is it "secure" to store a password and username in a .env file in a server to validate an admin API endpoint against?

語境

我在 Actix-Web 中構建了一個 RESTful API 服務器,其中 Rust 托管在 Heroku 付費計划中。 它有 n 個用於訪問內容的公共可用端點,以及 3 個僅限管理員使用的端點(用於創建、編輯和刪除公共內容)。

我是唯一一個需要訪問僅限管理員的端點的開發人員——而且很少訪問。 幾個隨機用戶每天都會使用公開可用的端點。

通常,我會使用 JWT 實施類似於的身份驗證/授權策略(但對於我的情況,顯然是在 Rust 中)。 然而,這種“更常見”的解決方案帶來的額外復雜性對於我的簡單用例來說似乎有點過分了。

我的理論解決方案

我可以像這樣將usernamepassword字段添加到我的項目中的.env文件中,以便與在僅限管理員的處理程序函數中傳遞的用戶名和密碼相匹配嗎?

... OTHER KEYS ...
USERNAME = my_really_long_random_username
PASSWORD = my_really_long_random_password

乍一看,我正在以純文本形式存儲密碼……但是,只有一個,它在我的.env文件中,默認情況下是私有的。

我會為僅限管理員的路線做的就是這個(偽代碼):

pub fn router_handler(passed_data) -> HttpResponse {
    if passed_data.username == env.username && passed_data.password == env.password {
        // CONSIDER THEM ADMIN
    } else {
        // BLOCK THEM AS THEY'RE NOT AUTHENTICATED
    }
}

我試過的

我還沒有嘗試過這個策略,但我很好奇你對它的看法。

問題

我的理論解決方案安全嗎? 考慮到我的用例,這看起來合理嗎?


對問題的回應:jthulhu - 這就是我所做的嗎?

所以,我的.env文件應該看起來像這樣:

... OTHER KEYS ...
USERNAME = a98ysnrn938qwyanr9c8yQden 
PASSWORD = aosdf83h282huciquhr8291h91 

這兩個哈希值都是通過我在下面添加的to_hash function 運行我預先確定的用戶名和密碼的結果(可能使用這樣的庫)。

然后,我的處理程序應該是這樣的(偽代碼):

pub fn router_handler(passed_data) -> HttpResponse {
    if to_hash(passed_data.username) == env.username && to_hash(passed_data.password) == env.password {
        // CONSIDER THEM ADMIN
    } else {
        // BLOCK THEM AS THEY'RE NOT AUTHENTICATED
    }
}

您永遠不應該在服務器中以明文形式存儲密碼,因為如果有人闖入您的服務器並可以讀取該文件,他們現在可以訪問所有內容(而他們以前可能無法訪問)。 不僅如此,大多數人傾向於重復使用密碼,因此以明文形式存儲一個密碼意味着暴露使用該密碼的多項服務。

相反,您應該輸入 hash 密碼並存儲 hash。要執行登錄,請檢查給定密碼的 hash 是否與存儲的密碼相對應。 這種機制可以用於文件或類似的數據庫,並且幾乎獨立於您實際存儲散列的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM