Bash

通過 cat 將密碼傳遞給 curl 有多不安全

  • August 16, 2019

我有一個執行curl多次的腳本。

我只想輸入一次密碼(所以我不希望 curl 在每次執行時都要求輸入密碼)。我不希望密碼出現在程序列表或文件描述符或其他內容中。

#!/bin/bash

read -p "Enter pw:" -s pw

provide_pw() {
   cat << END
"$pw"
END
}

for i in {1..10}; do
   curl -u $(logname):$(provide_pw) "$url"
done

這種方法是否安全,或者如果我這樣做,其他使用者是否可以獲取我的密碼?

對於所有與 read 和 cat 和 heredocs 一起跳舞的事情,最終命令替換將導致$(provide_pw)被實際密碼替換。然後它將成為流程細節的一部分。

man curl, 關於-u:

在它工作的系統上,curl 將從程序列表中隱藏給定的選項參數。

因此,在這樣的系統上,以及在hidepid適當設置的 Linux 系統上,密碼將對其他使用者隱藏,但在其他地方,每個人都可以通過使用 , 等查看 curl 程序的命令行來看到ps密碼top

如果您願意read輸入密碼,只需curl為您完成:

如果您只是指定使用者名,curl 將提示輸入密碼。

另請參閱:curl 如何保護密碼不出現在 ps 輸出中?這裡有一個競爭條件:在 curl 開始和清理命令行之間,密碼將是可見的,如果它沒有被其他方式隱藏(如hidepid在 Linux 上),那麼在該視窗中每個人都可以看到。

引用自:https://unix.stackexchange.com/questions/535568