Sicherheitsaspekte: Microsoft Windows-Steuerelemente

Dieses Thema enthält Informationen zu Sicherheitsaspekten im Zusammenhang mit den Windows-Steuerelementen. Die Informationen in diesem Thema enthalten nicht alles, was Sie über Sicherheitsprobleme wissen müssen – verwenden Sie diese als Ausgangspunkt und Referenz für diesen Technologiebereich.

Die Vernetzung von Computern ist weit verbreitet. Die Hauptsorge eines Entwicklers muss die Anwendungssicherheit sein. In den folgenden Abschnitten werden einige potenzielle Sicherheitsprobleme erläutert, die beim Programmieren von Windows-Steuerelementen berücksichtigt werden müssen.

Null-beendete Steuerelementnachrichten

Viele der Steuerelementmeldungen und Makros weisen Zeichenfolgenparameter auf. Häufig überprüfen diese Nachrichten nicht die Eingabezeichenfolgen, insbesondere wird ein terminierendes '\0' nicht überprüft. Wenn Sie eine Nachricht aufrufen, die eine Zeichenkette als Parameter verwendet, geben Sie explizit an, dass die Zeichenkette mit Null abgeschlossen ist.

Zeichenfolgenverwendung

Wenn Sie Windows-Steuerelemente programmieren, ist es erforderlich, Zeichenfolgen zu bearbeiten. Fast jedes Steuerelement erfordert das Einfügen von Text. Um beispielsweise ein Listenfeld aufzufüllen, müssen Sie Zeichenfolgen in das Steuerelement laden. Da die Verwendung von Zeichenfolgen häufig zu Pufferüberläufen führt, treffen Sie Vorsichtsmaßnahmen, um dieses Sicherheitsrisiko zu vermeiden.

Weitere Informationen zu Pufferüberläufen finden Sie unter Schreiben von sicherem Code von Michael Howard und David LeBlanc, Microsoft Press, 2002 und Bewährte Methoden für Sicherheits-APIs.

Eingabeüberprüfung

Die folgenden Kontrollmeldungen können Sicherheitsprobleme verursachen.

Wenn sich der Text zwischen dem Aufruf zum Abrufen der Textlänge und dem Zeitpunkt, zu dem der Text angezeigt oder verwendet wird, ändert, kann ein Pufferüberlauf auftreten. Um dies zu vermeiden, müssen Sie die Zeichenfolge überprüfen, bevor Sie diese verwenden. Darüber hinaus weisen die Nachrichten, die Text, CB_GETLBTEXT, TB_GETBUTTONTEXTund TTM_GETTEXT abrufen, keinen Puffergrößenparameter auf, der das Potenzial für einen Pufferüberlauf darstellt.

Wenn Sie CB_GETLBTEXT oder SB_GETTEXT verwenden, sollten Sie zuerst CB_GETLBTEXTLEN oder SB_GETTEXTLENGTH aufrufen, um die Puffergröße abzurufen. Einige dieser Nachrichten, TB_GETBUTTONTEXT, LVM_GETISEARCHSTRING und TVM_GETISEARCHSTRING können mit einem NULL-Parameterwert aufgerufen werden, um die Länge der Zeichenfolge abzurufen, bevor die Nachricht aufgerufen wird, um die Zeichenfolge abzurufen.

Eine Nachricht, auf die Sie achten sollten, ist die Statusleiste SB_GETTIPTEXT-Nachricht. Diese Meldung bietet keine Möglichkeit, die Länge der abzurufenden Zeichenfolge abzufragen.

Kennwortverwendung

Wenn Sie kennwortgeschützte Bearbeitungssteuerelemente (ES_PASSWORD-Stil) verwenden, muss der Puffer, der den abgerufenen Text enthält, so schnell wie möglich auf Null festgelegt werden, um zu vermeiden, dass das Kennwort des Benutzers im Arbeitsspeicher verfügbar ist.

Sicherheitswarnungen

In der folgenden Tabelle sind Funktionen aufgeführt, die bei falscher Verwendung die Sicherheit Ihrer Anwendungen gefährden können. Die hier aufgelisteten Nachrichten stellen keinen Parameter bereit, der die Puffergröße angibt.

Funktion Abmilderung
DlgDirListComboBox Vergewissern Sie sich, dass der von der Funktion verwendete Puffer beschreibbar ist und ein Null-Ende hat.
CB_GETLBTEXT Rufen Sie CB_GETLBTEXTLEN auf, um die Puffergröße abzurufen, und rufen Sie dann CB_GETLBTEXT auf, um die Zeichenfolge abzurufen.
LVM_GETISEARCHSTRING Rufen Sie die Nachricht mit einem NULL-Parameterwert auf, um die Puffergröße abzurufen, und rufen Sie dann die Nachricht ein zweites Mal auf, um die Zeichenfolge abzurufen.
SB_GETTEXT Rufen Sie SB_GETTEXTLENGTH auf, um die Puffergröße abzurufen, und rufen Sie dann SB_GETTEXT auf, um die Zeichenfolge abzurufen.
TB_GETBUTTONTEXT Rufen Sie die Nachricht mit einem NULL-Parameterwert auf, um die Puffergröße abzurufen, und rufen Sie dann die Nachricht ein zweites Mal auf, um die Zeichenfolge abzurufen.
TTM_GETTEXT Diese Meldung bietet keine Möglichkeit, die Größe des Puffers zu kennen oder anzugeben.
TVM_GETISEARCHSTRING Rufen Sie die Nachricht auf, indem Sie einen NULL-Parameterwert übergeben, um die Puffergröße abzurufen, und rufen Sie dann die Nachricht ein zweites Mal auf, um die Zeichenfolge abzurufen.

 

Weitere Ressourcen

Microsoft Security

Security

Microsoft Security Response Center

Bewährte Methoden für die Sicherheits-APIs