Důležité informace o zabezpečení: Ovládací prvky Systému Microsoft Windows
Toto téma obsahuje informace o aspektech zabezpečení souvisejících s ovládacími prvky Windows. Informace v tomto tématu neposkytují všechno, co potřebujete vědět o problémech se zabezpečením – použijte je jako výchozí bod a referenci pro tuto technologickou oblast.
Vzájemné propojení mezi počítači je běžné; Hlavním zájmem vývojáře musí být zabezpečení aplikací. Následující části se týkají některých potenciálních problémů se zabezpečením, které je potřeba vzít v úvahu při programování ovládacích prvků Windows.
- řídicích zpráv ukončených hodnotou Null
- Použití řetězce
- ověřování vstupu
- použití hesla
- výstrah zabezpečení
- související témata
Řídicí zprávy s ukončenou hodnotou null
Mnoho řídicích zpráv a maker má parametry řetězce. Tyto zprávy často neověřují vstupní řetězce, zejména nekontrolují ukončení '\0'
. Při volání zprávy, která používá řetězec jako parametr, explicitně určete, že řetězec je ukončen s hodnotou null.
Použití řetězce
Při programování ovládacích prvků systému Windows je nutné manipulovat s řetězci. Téměř každý ovládací prvek vyžaduje vložení textu. Pokud chcete například vyplnit seznam, musíte do ovládacího prvku načíst řetězce. Vzhledem k tomu, že použití řetězců nesprávně způsobuje přetečení vyrovnávací paměti, proveďte preventivní opatření, aby se zabránilo tomuto riziku zabezpečení.
Další informace o přetečení vyrovnávací paměti naleznete v tématu Psaní zabezpečeného kódu Michael Howard a David LeBlanc, Microsoft Press, 2002 a osvědčené postupy pro rozhraní API zabezpečení.
Ověření vstupu
Následující řídicí zprávy můžou způsobovat problémy se zabezpečením.
- CB_GETLBTEXT
- LVM_GETISEARCHSTRING
- SB_GETTEXT
- SB_GETTIPTEXT
- TB_GETBUTTONTEXT
- TTM_GETTEXT
- TVM_GETISEARCHSTRING
Pokud se text změní mezi voláním, aby získal délku textu a čas zobrazení nebo použití textu, může dojít k přetečení vyrovnávací paměti. Abyste tomu předešli, musíte před použitím řetězce ověřit. Kromě toho zprávy, které načítají text, CB_GETLBTEXT, TB_GETBUTTONTEXTa TTM_GETTEXT, nemají žádný parametr velikosti vyrovnávací paměti, který představuje potenciál pro přetečení vyrovnávací paměti.
Při použití CB_GETLBTEXT nebo SB_GETTEXTbyste nejprve měli zavolat CB_GETLBTEXTLEN nebo SB_GETTEXTLENGTH získat velikost vyrovnávací paměti. Některé z těchto zpráv, TB_GETBUTTONTEXT, LVM_GETISEARCHSTRINGa TVM_GETISEARCHSTRING, lze volat s hodnotou parametru NULL získat délku řetězce před vyvoláním zprávy k načtení řetězce.
Zpráva, na kterou byste měli věnovat zvláštní pozornost, je stavový řádek SB_GETTIPTEXT zprávu. Tato zpráva neposkytuje žádný způsob, jak zadat dotaz na délku řetězce, který se má načíst.
Použití hesla
Pokud používáte ovládací prvky pro úpravy chráněné heslem (ES_PASSWORD styl), vyrovnávací paměť obsahující načtený text musí být co nejdříve nastavena na nulu, aby se zabránilo zveřejnění hesla uživatele v paměti.
Výstrahy zabezpečení
Následující tabulka uvádí funkce, které v případě nesprávného použití můžou ohrozit zabezpečení vašich aplikací. Zde uvedené zprávy neposkytují parametr, který určuje velikost vyrovnávací paměti.
Rys | Zmírnění |
---|---|
DlgDirListComboBox | Ujistěte se, že vyrovnávací paměť používaná funkcí může být zapsána do a je ukončena hodnotou null. |
CB_GETLBTEXT | Voláním CB_GETLBTEXTLEN získejte velikost vyrovnávací paměti a potom zavolejte CB_GETLBTEXT pro načtení řetězce. |
LVM_GETISEARCHSTRING | Zavolejte zprávu s hodnotou parametru NULL získat velikost vyrovnávací paměti a potom zprávu zavoláte podruhé, aby se řetězec načetl. |
SB_GETTEXT | Voláním SB_GETTEXTLENGTH získáte velikost vyrovnávací paměti a potom zavoláte SB_GETTEXT pro načtení řetězce. |
TB_GETBUTTONTEXT | Zavolejte zprávu s hodnotou parametru NULL získat velikost vyrovnávací paměti a potom zprávu zavoláte podruhé, aby se řetězec načetl. |
TTM_GETTEXT | Tato zpráva neposkytuje způsob, jak zjistit nebo určit velikost vyrovnávací paměti. |
TVM_GETISEARCHSTRING | Volání zprávy předáním hodnoty parametru NULL k získání velikosti vyrovnávací paměti a potom zavoláním zprávy znovu načtěte řetězec. |
Související témata
-
další prostředky
-
Zabezpečení Microsoftu