2013-12-20

Shell Script 隱藏互動文字輸入

*nix 系統使用者,經常使用 command line 進行系統操作
有時需要進行驗證、登入等操作,基於安全理由密碼等資料不應該顯示及儲存
但應該如何隱藏文字 ?

執行 Shell Script 指令非常簡單
command --user='abc' --password='123'
一般直接的 Shell Script 指令通常會以這種方式運作
但如字面上 password 的資料便會光明正大地顯示在畫面上,而且還會記錄在 bash history 中
雖然 bash history 是可以清除,但若有漏網之魚,後果可能相當嚴重

有些指令為避免顯示及儲存的資料,使用互動方式讓使用者輸入資料
command
user : abc
password : 
這種方式相對比直接以參數形式輸入顯然比較麻煩,但卻比較安全

Shell Script 如使用互動方式傳入參數會使用 read 指令,但 read 並不能隱藏輸入的文字
這時便借用 stty 來達成任務
#!/bin/sh
read -p 'user : ' user
stty -echo
read -p 'password : ' password
stty echo
echo ''
使用 stty -echo 將 user input 的資料不顯示在 console 上,完成輸入後使用 stty echo 恢復顯示

事實上使用 stty -echo 之後輸入指令同樣可以隱藏,但使用者連自己正在輸入甚麼也看不到

沒有留言 :

張貼留言