簡體   English   中英

os.system(f"{var}") 會暴露變量(打印/標准輸出)嗎?

[英]Will os.system(f"{var}") expose the variable (print/stdout)?

我對os.system有一些安全問題。 由於我找不到答案,我想尋求您的幫助。

因此,我將數據庫的用戶名和密碼存儲為環境變量。 然后我想用 shell 語句啟動一個服務器:

os.system(f"server --host 0.0.0.0 " f"{db_type}://{db_user}:{db_pw}@host")

我刪除了聲明的某些部分,因為它們與這個問題無關。

我的問題是:我的變量db_userdb_pw會暴露在某個地方嗎? 我擔心os.system會打印或標准輸出帶有明確變量的整個語句。 如果是這樣,有沒有辦法阻止它?

代碼將在 ec2/aws 上運行。 我知道還有其他方法可以啟動服務器,但我對這個特定場景感興趣。

是的,內容會暴露。 不是專門針對 stdout/err,但您可以看到內容。 舉個例子

password='secret'
os.system(f"echo {password} && sleep 1000")

這將在新的子 shell 中啟動命令(根據文檔)。 該進程現在將運行,因此它將在正在運行的進程列表中可見。 例如開始tophtop並搜索該進程。 這可能會顯示如下內容:

在此處輸入圖像描述

在那里您可以看到password變量的內容。 這是因為首先評估和替換os.system的完整字符串參數。 然后將此字符串傳遞給sh以啟動新的子 shell。

由於 unix 用戶可以列出機器進程,因此通過 cli arguments 傳遞秘密絕不是一個好主意。 也不是通過 ENV 變量傳遞,因為您可以通過cat /proc/{$pid}/environ檢查環境。 最好的方法是通過標准輸入將數據傳遞給子進程。

暫無
暫無

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

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