我看到兩個明顯的方式來做到這一點:
- 迭代通過你的args數組,找到手動密碼參數和掩碼密碼
- 結合參數轉換爲字符串,並使用正則表達式
更換密碼
我寧願第一個,使用LINQ:
var argsForLogging = args
.Select(arg => arg.StartsWith("-password=") ? "-password=(entered)" : arg);
Console.WriteLine("Command line parameters: {0}", string.Join(" ", argsForLogging));
它可能看起來並不好,但它易於閱讀,並且沒有正則表達式:)
P.S.可以使代碼輸出不是(entered)
,但密碼中有字母的地方會有多個星號。但是,它仍然會披露非常敏感的信息。
更新: 如果參數格式不嚴格,那麼您需要考慮到這一點。
例如,如果它應該是不區分大小寫的,那麼你可能想用這個辦法:
var argsForLogging = args
.Select(arg => arg.Trim().StartsWith("-password=", true, CultureInfo.InvariantCulture)
? "-password=(entered)"
: arg);
Console.WriteLine("Command line parameters: {0}", string.Join(" ", argsForLogging));
隔空通過命令行輸入密碼(不需要用戶輸入)是不安全的。它可能不會顯示在您的程序日誌中,但它會顯示內存,並且也會顯示在調用您的應用程序的腳本的日誌中。這對你來說可能也可能不是問題,但我想我會提到它,因爲你正在試圖讓你的應用程序更安全。 –
它用於Windows服務設置。就像我們可以使用用戶名和密碼設置服務一樣(使用'services.msc'),這個應用程序會設置一個服務。無法透露更多。 – Ajay
不用擔心不披露的東西,我不會撬。如果您的應用可以這樣做(以交互模式),則可能需要考慮提示用戶輸入帶有標準系統調用的密碼,並在用戶嘗試以無人蔘與模式傳遞密碼時發出警告。如果你可以讓你的程序運行你需要的用戶令牌,你也可以避免自己處理密碼。我已經跳過了一些窗口,特別是服務和設置程序,所以你會更好地裝備解決這個謎題,比我更好:) –