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 sie als Ausgangspunkt und Referenz für diesen Technologiebereich.
Die Verbindungsivität zwischen Computern ist üblich; Das Hauptanliegen 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.
- von Null beendeten Steuerelementnachrichten
- Zeichenfolge
- Eingabeüberprüfung
- Kennwortverwendung
- Sicherheitswarnungen
- Verwandte Themen
Null-beendete Steuerelementnachrichten
Viele der Steuerelementmeldungen und Makros weisen Zeichenfolgenparameter auf. Häufig überprüfen diese Nachrichten nicht die Eingabezeichenfolgen, insbesondere nicht, dass sie auf eine beendete '\0'
überprüfen. Wenn Sie eine Nachricht aufrufen, die eine Zeichenfolge als Parameter verwendet, geben Sie explizit an, dass die Zeichenfolge null beendet ist.
Zeichenfolgenverwendung
Wenn Sie Windows-Steuerelemente programmieren, ist es erforderlich, Zeichenfolgen zu bearbeiten. Fast jedes Steuerelement erfordert, dass Text eingefügt werden muss. 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 Writing Secure Code von Michael Howard und David LeBlanc, Microsoft Press, 2002 und Best Practices for the Security APIs.
Eingabeüberprüfung
Die folgenden Kontrollmeldungen können Sicherheitsprobleme verursachen.
- CB_GETLBTEXT
- LVM_GETISEARCHSTRING
- SB_GETTEXT
- SB_GETTIPTEXT
- TB_GETBUTTONTEXT
- TTM_GETTEXT
- TVM_GETISEARCHSTRING
Wenn sich der Text zwischen dem Aufruf ändert, um die Textlänge und die Uhrzeit der Anzeige oder Verwendung des Texts abzurufen, kann ein Pufferüberlauf auftreten. Um dies zu vermeiden, müssen Sie die Zeichenfolge überprüfen, bevor Sie sie verwenden. Darüber hinaus weisen die Nachrichten, die Text, CB_GETLBTEXT, TB_GETBUTTONTEXTund TTM_GETTEXTabrufen, keinen Puffergrößenparameter auf, der das Potenzial für einen Pufferüberlauf darstellt.
Wenn Sie CB_GETLBTEXT oder SB_GETTEXTverwenden, sollten Sie zuerst CB_GETLBTEXTLEN oder SB_GETTEXTLENGTH aufrufen, um die Puffergröße abzurufen. Einige dieser Nachrichten, TB_GETBUTTONTEXT, LVM_GETISEARCHSTRINGund TVM_GETISEARCHSTRING, können mit einem NULL--Parameterwert aufgerufen werden, um die Länge der Zeichenfolge abzurufen, bevor Sie die Nachricht aufrufen, 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 Formatvorlage) 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 Features 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.
Merkmal | Milderung |
---|---|
DlgDirListComboBox | Stellen Sie sicher, dass der von der Funktion verwendete Puffer in und null beendet werden kann. |
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. |
Verwandte Themen
-
andere Ressourcen