1. 程式人生 > >windows Shell 學習記錄,1-------基礎介紹與安全性

windows Shell 學習記錄,1-------基礎介紹與安全性

文件僅僅做記錄,賺一些積分

Windows UI 給使用者提供了執行應用程式、管理作業系統所需要的很大範圍的物件的訪問能力。其中,數量最大和最熟悉的就是我們平常所使用的駐留在電腦磁碟驅動器上的資料夾和資料夾。另外也有一些虛擬物件,允許使用者執行,類似將檔案傳送到遠端印表機,或訪問回收站的任務。Shell 組織這些物件到一個分級的名稱空間,並給應用程式和使用者提供了一個一致和高效的方法來訪問和管理這些物件。

Shell 開發指南

安全性考慮

這小節,介紹Shell 相關的安全問題,但並不涉及所有的需要知道的安全資訊—相反,僅僅作為一個開頭和參考。

Shell 控制了系統很多的重要的方面,包括一些如果處理不當可能造成潛在安全漏洞的部分。本主題概述了一些常見問題以及如何在應用程式中解決這些問題。安全不僅僅限制在基於Internet 的開發。在共享系統上,包括可以通過終端服務訪問的系統,開發人員必須確保當前使用者不會做可能傷害使用系統的其它使用者的事情。

正確的安裝應用程式

大部分潛在的Shell安全問題,可以通過正確安裝應用程式來緩解。

1. 安裝應用程式到Program Files folder

Operating System

Location

Windows XP, Windows Server 2003, and earlier

CSIDL_PROGRAM_FILES

Windows Vista and later

FOLDERID_ProgramFiles, FOLDERID_ProgramFilesX86, FOLDERID_ProgramFilesX64, FOLDERID_ProgramFilesCommon, FOLDERID_ProgramFilesCommonX86, or FOLDERID_ProgramFilesCommonX64. See 

KNOWNFOLDERID for specifics.

2. 不要將使用者資料儲存到Program Files folder

將所有使用者共有的資料儲存在恰當的資料夾

Operating System

Location

Windows XP, Windows Server 2003, and earlier

CSIDL_COMMON_APPDATA

Windows Vista and later

FOLDERID_ProgramData

將特定使用者的資料儲存在正確的使用者資料資料夾

Operating System

Location

Windows XP, Windows Server 2003, and earlier

CSIDL_APPDATA, CSIDL_PERSONAL, and others.

Windows Vista and later

FOLDERID_RoamingAppData, FOLDERID_Documents, and others.

  1. 如果你必須將程式安裝在Program Files 資料夾之外的地方,應該使用ACL 來確保使用者沒有訪問檔案系統中不恰當的地方的許可權。任何特定於某個使用者的資料都應該使用ACL 來禁止其它使用者的訪問。
  2. 當你建立了檔案關聯,應該確保正確的指定了命令列。使用全路徑,並將包含了空白的空格的路徑用雙引號包起來。將命令引數包裝在單獨的引號中。否則,可能會錯誤的解析該字串。下面是兩個示例:

"C:\Program Files\MyApp\MyApp.exe" "%1" "%2"

C:\MyAppDir\MyApp\MyApp.exe "%1"

注意:

不同系統上,標準安裝位置的位置可能不同,Vista 後的系統,使用SHGetKnownFolderPath + 正確的KNOWNFOLDERID 值,XP 和 Server2003 或更早的系統上,SHGetFolderLocation 或 SHGetFolderPath + 正確的CSIDL 值。

Shlwapi

即Shell 輕量級API,包括一系列的字元操作API。錯誤的使用這些API,可能沒有任何截斷提示的情況下將傳入的字串截斷。下面的情況下,不建議使用Shlwapi,而應該使用風險更加小的,替代API

對於那些返回檔案路徑的函式,比如PathRelativePathTo,建議傳入buffer,且字元數為MAX_PATH,這樣可以確保有足有的快取。

Autocomplete

密碼操作時不要使用自動填充功能???

ShellExecute,ShellExecuteEx 和 相關函式

可以用來載入應用程式的API:ShellExecute,ShellExecuteEx,WinExec,和SHCreateProcessAsUserW。

  1. 輸入全路徑
  2. 輸入命令列,且,包含空格,使用引號包起來

移動和拷貝檔案

Shell 名稱空間擴充套件是強大、靈活的給使用者展示資料的一種方式。但錯誤的書寫將導致系統錯誤。需要注意下面兩點:

  1. 不要假設資料,比如圖片被正確的格式化
  2. 不要假設MAX_PATH 是字元所佔用的位元組數,它代表的是字元數

安全警告

如果錯誤的使用下面的函式,可能會破壞所編寫的應用程式的安全性