Udostępnij za pośrednictwem


Zagadnienia dotyczące zabezpieczeń: Mechanizmy kontroli systemu Microsoft Windows

Ten temat zawiera informacje o zagadnieniach dotyczących zabezpieczeń związanych z kontrolkami systemu Windows. Informacje przedstawione w tym temacie nie zawierają wszystkich potrzebnych informacji o problemach z zabezpieczeniami — użyj ich jako punktu wyjścia i odwołania do tego obszaru technologii.

Łączność między komputerami jest powszechna; głównym problemem dewelopera musi być bezpieczeństwo aplikacji. W poniższych sekcjach omówiono niektóre potencjalne problemy z zabezpieczeniami, które należy wziąć pod uwagę podczas programowania kontrolek systemu Windows.

Komunikaty sterujące zakończone wartością null

Wiele komunikatów sterujących i makr ma parametry ciągu. Często te komunikaty nie weryfikują ciągów wejściowych, w szczególności nie sprawdzają zakończenia '\0'. W przypadku wywoływania komunikatu, który używa ciągu jako parametru, jawnie określ, że ciąg jest zakończony wartością null.

Użycie ciągu

Podczas programowania kontrolek systemu Windows konieczne jest manipulowanie ciągami. Prawie każda kontrolka wymaga wstawienia tekstu. Aby na przykład wypełnić pole listy, musisz załadować ciągi do kontrolki. Ponieważ używanie ciągów niepoprawnie często powoduje przekroczenie buforu, należy podjąć środki ostrożności, aby uniknąć tego ryzyka bezpieczeństwa.

Aby uzyskać więcej informacji na temat przepełnień buforu, zobacz Writing Secure Code by Michael Howard and David LeBlanc, Microsoft Press, 2002 i Best Practices for the Security APIs.

Walidacja danych wejściowych

Następujące komunikaty sterujące mogą przedstawiać problemy z zabezpieczeniami.

Jeśli tekst zmieni się między wywołaniem, aby uzyskać długość tekstu i czas wyświetlania lub użycia tekstu, może wystąpić przepełnienie buforu. Aby tego uniknąć, należy zweryfikować ciąg przed jego użyciem. Ponadto komunikaty pobierające tekst, CB_GETLBTEXT, TB_GETBUTTONTEXTi TTM_GETTEXT, nie mają parametru rozmiaru buforu, który przedstawia potencjalny przeładowanie buforu.

W przypadku używania CB_GETLBTEXT lub SB_GETTEXTnależy najpierw wywołać CB_GETLBTEXTLEN lub SB_GETTEXTLENGTH, aby uzyskać rozmiar buforu. Niektóre z tych komunikatów, TB_GETBUTTONTEXT, LVM_GETISEARCHSTRINGi TVM_GETISEARCHSTRING, można wywołać za pomocą wartości parametru o wartości NULL, aby uzyskać długość ciągu przed wywołaniem komunikatu w celu pobrania ciągu.

Komunikat, który należy zwrócić szczególną uwagę, to pasek stanu SB_GETTIPTEXT komunikat. Ten komunikat nie umożliwia wykonywania zapytań dotyczących długości ciągu, który ma zostać pobrany.

Użycie hasła

Jeśli używasz kontrolek edycji chronionych hasłem (ES_PASSWORD stylu), bufor zawierający pobrany tekst musi być ustawiony na zero tak szybko, jak to możliwe, aby uniknąć ujawnienia hasła użytkownika w pamięci.

Alerty zabezpieczeń

W poniższej tabeli wymieniono funkcje, które w przypadku nieprawidłowego użycia mogą naruszyć bezpieczeństwo aplikacji. Komunikaty wymienione w tym miejscu nie zawierają parametru, który określa rozmiar buforu.

Cecha Łagodzenia
DlgDirListComboBox Upewnij się, że bufor używany przez funkcję może być zapisywany i jest zakończony wartością null.
CB_GETLBTEXT Wywołaj CB_GETLBTEXTLEN, aby uzyskać rozmiar buforu, a następnie wywołaj CB_GETLBTEXT, aby pobrać ciąg.
LVM_GETISEARCHSTRING Wywołaj komunikat z wartością NULL parametru, aby uzyskać rozmiar buforu, a następnie wywołaj komunikat po raz drugi, aby pobrać ciąg.
SB_GETTEXT Wywołaj SB_GETTEXTLENGTH, aby uzyskać rozmiar buforu, a następnie wywołaj SB_GETTEXT, aby pobrać ciąg.
TB_GETBUTTONTEXT Wywołaj komunikat z wartością NULL parametru, aby uzyskać rozmiar buforu, a następnie wywołaj komunikat po raz drugi, aby pobrać ciąg.
TTM_GETTEXT Ten komunikat nie zapewnia sposobu, w jaki można znać lub określić rozmiar buforu.
TVM_GETISEARCHSTRING Wywołaj komunikat, przekazując wartość parametru NULL, aby uzyskać rozmiar buforu, a następnie wywołaj komunikat po raz drugi, aby pobrać ciąg.

 

innych zasobów

Microsoft Security

Security

Centrum zabezpieczeń firmy Microsoft

najlepsze rozwiązania dotyczące interfejsów API zabezpieczeń