安全性考慮:Microsoft Windows 控件
本主題提供與 Windows 控制件相關的安全性考慮相關信息。 本主題中的資訊不會提供您對於安全性問題所需的所有資訊,請將其作為此技術領域的起點和參考。
計算機之間的互連性很常見;開發人員的主要考慮必須是應用程式安全性。 下列各節將討論程序設計 Windows 控制件時需要考慮的一些潛在安全性問題。
Null 終止的控制訊息
許多控件訊息和宏都有字串參數。 這些訊息通常不會驗證輸入字串,特別是不會檢查終止 '\0'
的 。 當您呼叫使用字串做為參數的訊息時,請明確指定字元串為 Null 終止。
字串使用
當您對 Windows 控制件進行程式設計時,必須操作字串。 幾乎每個控件都需要插入文字。 例如,若要填入清單框,您必須將字串載入控制項。 因為不正確地使用字串通常會造成緩衝區滿溢,因此請採取預防措施,以避免發生此安全性風險。
如需緩衝區滿溢的詳細資訊,請參閱由 Michael Howard 和 David LeBlanc 撰寫安全程式代碼、Microsoft Press、2002 和 安全性 API 的最佳作法。
輸入驗證
下列控制訊息可能會顯示安全性問題。
- CB_GETLBTEXT
- LVM_GETISEARCHSTRING
- SB_GETTEXT
- SB_GETTIPTEXT
- TB_GETBUTTONTEXT
- TTM_GETTEXT
- TVM_GETISEARCHSTRING
如果呼叫之間的文字變更以取得文字長度,以及顯示或使用文字的時間,可能會發生緩衝區滿溢。 若要避免這種情況,您必須先驗證字串,才能使用它。 此外,擷取文字、CB_GETLBTEXT、TB_GETBUTTONTEXT和TTM_GETTEXT的訊息,沒有緩衝區大小參數,可能會造成緩衝區滿溢。
當您使用CB_GETLBTEXT或SB_GETTEXT時,應該先呼叫CB_GETLBTEXTLEN或SB_GETTEXTLENGTH,以取得緩衝區大小。 其中一些訊息,TB_GETBUTTONTEXT、LVM_GETISEARCHSTRING和TVM_GETISEARCHSTRING,可以使用NULL 參數值呼叫,以取得字串的長度,然後再叫用訊息來擷取字元串。
您應該特別注意的訊息是狀態列 SB_GETTIPTEXT 訊息。 此訊息無法查詢要擷取之字串的長度。
密碼使用
如果您使用受密碼保護的編輯控件(ES_PASSWORD 樣式),則包含所擷取文字的緩衝區必須儘快設定為零,以避免在記憶體中公開用戶的密碼。
安全性警示
下表列出不正確地使用的功能可能會危害應用程式的安全性。 此處所列的訊息不提供指定緩衝區大小的參數。
功能 | 風險降低 |
---|---|
DlgDirListComboBox | 請確定函式所使用的緩衝區可以寫入 ,並且以 Null 終止。 |
CB_GETLBTEXT | 呼叫 CB_GETLBTEXTLEN 以取得緩衝區大小,然後呼叫 CB_GETLBTEXT 來擷取字串。 |
LVM_GETISEARCHSTRING | 使用 NULL 參數值呼叫訊息以取得緩衝區大小,然後第二次呼叫訊息以擷取字串。 |
SB_GETTEXT | 呼叫 SB_GETTEXTLENGTH 以取得緩衝區大小,然後呼叫 SB_GETTEXT 來擷取字串。 |
TB_GETBUTTONTEXT | 使用 NULL 參數值呼叫訊息以取得緩衝區大小,然後第二次呼叫訊息以擷取字串。 |
TTM_GETTEXT | 此訊息不會讓您知道或指定緩衝區的大小。 |
TVM_GETISEARCHSTRING | 傳遞 NULL 參數值以取得緩衝區大小,然後第二次呼叫訊息來擷取字串,以呼叫訊息。 |
相關主題