我正在寫一個bash腳本,它需要幾個用戶輸入,主要是目錄路徑和文件名。該程序將創建指定的目錄和文件。在Bash/Shell腳本中的安全輸入驗證
當寫的目錄路徑,我要求絕對路徑 - 〜/ DIR/...,或$ PATH/DIR/...或./DIR/...不準。目錄路徑只應以/DIR/DIR/...的形式提供,文件路徑格式爲/DIR/DIR/.../filename,文件名格式爲,文件名爲。 我也想確保用戶沒有添加任何命令行選項(例如,如果我運行sudo,我想確保用戶沒有在他們的輸入中的任何地方附加-u)。
但是,由於目錄路徑和文件名可能包含破折號,下劃線,空格,句點和字母數字字符,因此我並不完全確定清理其輸入的最佳方式。任何其他角色都應該被檢測到。
用戶輸入通過收集讀取。我使用的是Ubuntu系統,只要符合Ubuntu shell,它就可以工作。 假設只安裝了默認的系統軟件包。
多個選項是可以接受的,以處理驗證的各個部分(例如,使用--
治療下列數據作爲用於處理目錄路徑的參數,而不是一個命令[由Siguza建議],然後另一種選擇)。
正確映射目錄結構需要絕對路徑。由於我在路徑字符串上執行的功能,任何其他格式的路徑都會導致程序在匹配或附加到其他路徑時錯誤地解釋結構。
謝謝。
什麼工作:我以前接受的答案,用在某些情況下的真實路徑和的readlink,並使用-解釋下面的文本作爲參數。如果你想允許相對路徑,那麼使用readlink或realpath的結果作爲你的路徑。如果您想禁止相對路徑,請將原始字符串與readlink或實時路徑的結果進行比較。
大多數命令都支持「 - 」選項,這使得它們將所有以下參數視爲參數,而不是選項/標誌。除此之外,將所有變量用雙引號括起來以避免擴展。 – Siguza
雖然這確實處理了前兩個問題,但用戶仍然可以使用我的程序無法接受的格式整個目錄路徑。我或者需要拒絕無效輸入,或者將其符合有效輸入。 –
回覆:「用戶可以使用我的程序無法接受的格式存放整個目錄路徑,我需要拒絕無效輸入,或將其符合有效輸入」:*或*您可以更改程序以接受此類格式。 。 。 – ruakh