輔助技術的安全性考慮

輔助技術是在 Windows 桌面上執行的應用程式,並協助協助工具使用者與電腦上執行的作業系統和其他應用程式互動,包括新 Windows UI 中的應用程式。 輔助技術應用程式的運作方式是從作業系統和其他應用程式擷取資訊,然後以使用者可存取的方式呈現資訊。 輔助技術應用程式也可以根據使用者的輸入,以程式設計方式「驅動」作業系統和其他應用程式。

輔助技術應用程式的本質需要跨進程界限,而且他們能夠存取在較高完整性層級執行的進程, (IL) 本身。 (輔助技術應用程式會在中 IL.) 執行,例如,當使用者嘗試執行需要系統管理許可權的工作時,Windows 會顯示一個對話方塊,要求使用者同意繼續。 此對話方塊會在較高的 IL 執行,以保護它免于跨進程通訊,讓惡意軟體無法模擬使用者輸入。 同樣地,桌面登入畫面會在較高的 IL 執行,以防止其他進程存取。

輔助技術應用程式通常需要存取受保護的系統 UI 元素,或可能以較高許可權層級執行的其他進程。 因此,系統必須信任輔助技術應用程式,而且必須以特殊許可權執行。

若要存取較高的 IL 程式,輔助技術應用程式必須在應用程式的資訊清單中設定 UIAccess 旗標,並由具有系統管理員許可權的使用者啟動。

注意

存取許可權受限,如下所示:

  • 資訊清單中沒有 UIAccess 的應用程式會以中 IL 開頭,而且無法存取提升許可權的 (「medium+」 IL) 進程 UI。
  • 在資訊清單中具有 UIAccess 且由不在系統管理員群組中的使用者啟動的應用程式,會以 「medium+」 IL 啟動,且無法存取提升許可權的 UI (沒有以「高」IL 執行,例如透過 滑鼠右鍵啟動的應用程式 - > 以系統管理員 身分執行) 。
  • 應用程式具有 UI 存取權,且由系統管理員使用者啟動為「高」IL,而且可以存取提升許可權的 UI,因為它具有相同的 IL。

UIAccess 不足以讓進程透過 IL 界限向上移動。

除了能夠存取較高的 IL 程式之外,具有這些許可權的輔助技術應用程式可以隨時以 Z 順序中最上層的應用程式執行,這表示每當使用者需要輔助技術應用程式時,都可以看見且可供使用。

重要

先前列出的案例都無法存取在系統 IL 下執行的 UI。 只有在使用者帳戶控制 (UAC) DESKTOP 中的 SYSTEM (和系統 IL) 下啟動程式時,才能執行此動作。 在此情況下,設定 UIAccess 沒有任何作用。

輔助技術應用程式的 UIAccess 需求

輔助技術應用程式是 Windows Windows 傳統型應用程式,可與桌面上執行的其他進程互動,以及在新的 Windows UI 中取得系統和應用程式的資訊。 輔助技術應用程式接著可以將資訊提供給協助工具使用者。

輔助技術應用程式可藉由在應用程式資訊清單中設定 UIAccess 旗標來存取其他進程。 若要使用 UIAccess 旗標,輔助技術應用程式必須符合下列需求。

  • 需要顯示、互動或反映另一個應用程式的資訊,以提供協助工具案例的資訊和/或
  • 需要以最上層視窗執行,才能取得或顯示此資訊。

若要使用 UIAccess,輔助技術應用程式需要:

  • 使用憑證簽署,以與以較高許可權層級執行的應用程式互動。
  • 受系統信任。 應用程式必須安裝在需要使用者帳戶控制的安全位置, (UAC) 提示進行存取。 例如,Program Files 資料夾。
  • 使用包含 uiAccess 旗標的資訊清單檔來建置。

不應該使用 UIAccess:

  • 依非輔助技術的應用程式。

  • 透過輔助技術應用程式,顯示與目標協助工具案例無關的資訊或 UI。

  • 透過只想要出現在新 Windows UI 中其他應用程式上方的應用程式。

    注意

    針對新 Windows UI 開發的應用程式沒有 UIAccess 作為可用選項。

     

在應用程式資訊清單檔案中設定 UIAccess

若要存取受保護的系統 UI,應用程式必須以資訊清單檔中包含特殊屬性的資訊清單檔案來建置。 這個 uiAccess 屬性包含在 requestedExecutionLevel 標記中,如下列程式碼範例所示。

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
        <requestedPrivileges> 
        <requestedExecutionLevel 
            level="highestAvailable" 
            uiAccess="true" /> 
        </requestedPrivileges> 
    </security> 
</trustInfo> 

此程式碼中的 level 屬性值只是範例。

根據預設,UIAccess 為 「false」。 如果省略 屬性,或如果沒有資訊清單,應用程式就無法取得受保護 UI 的存取權。

如需有關 Windows 安全性、簽署應用程式以及建立資訊清單的詳細資訊,請參閱 Windows Vista 和 Windows Server 2008 開發人員劇本:MSDN 上的使用者帳戶控制 (UAC) 的 Windows Vista 應用程式開發需求

UI 自動化基礎