使用系統管理員許可權執行

建立應用程式需要執行哪一種帳戶類型的第一個步驟是檢查應用程式將使用哪些資源,以及其呼叫哪些特殊許可權 API。 您可能會發現應用程式或大部分的應用程式不需要系統管理員許可權。 撰寫安全程式碼,由 Michael Howard 和 David LeBlanc 提供如何執行此評估的絕佳描述,強烈建議您這麼做。 (某些語言和國家/地區可能無法使用此資源。)

您可以使用下列其中一種方法,提供應用程式所需的許可權,並降低惡意攻擊的風險:

  • 在具有較少許可權的帳戶下執行。 其中一種方法是使用 PrivilegeCheck 來判斷權杖中已啟用哪些許可權。 如果可用的許可權不適用於目前的作業,您可以停用該程式碼,並要求使用者以系統管理員許可權登入帳戶。
  • 分成需要系統管理員許可權的個別應用程式函式。 您可以為使用者提供執行 RunAs 命令的快捷方式。 如需如何設定快捷方式的詳細指示,請在 [說明] 中搜尋 「runas」。 以程式設計方式,您可以在應用程式的AppId 機碼登錄機碼下設定RunAs命令。
  • 呼叫 CredUIPromptForCredentials (GUI) 或 CredUICmdLinePromptForCredentials (命令列) 來驗證使用者,以取得使用者名稱和密碼。 如需範例,請參閱 詢問使用者輸入認證
  • 模擬使用者。 以系統等高度特殊許可權帳戶啟動的程式可以藉由呼叫 ImpersonateLoggedOnUser 或類似的 Impersonate 函式來模擬使用者帳戶,進而降低許可權等級。 不過,如果 對 RevertToSelf 的呼叫插入執行緒中,進程就會返回原始的系統許可權。

如果您判斷應用程式必須以具有系統管理員許可權的帳戶執行,而且系統管理員密碼必須儲存在軟體系統中,請參閱 處理密碼 ,以取得安全執行此動作的方法。