Sdílet prostřednictvím


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í 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.

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.

 

další prostředky

Zabezpečení Microsoftu

zabezpečení

centra Microsoft Security Response Center

osvědčené postupy pro rozhraní API zabezpečení