Beveiligingsoverwegingen: Microsoft Windows-besturingselementen
Dit onderwerp bevat informatie over beveiligingsoverwegingen met betrekking tot de Windows-besturingselementen. De informatie in dit onderwerp bevat niet alles wat u moet weten over beveiligingsproblemen. Gebruik deze als uitgangspunt en referentie voor dit technologiegebied.
Interconnectiviteit tussen computers is gebruikelijk; Het belangrijkste probleem van een ontwikkelaar moet toepassingsbeveiliging zijn. In de volgende secties worden enkele mogelijke beveiligingsproblemen besproken waarmee u rekening moet houden bij het programmeren van Windows-besturingselementen.
- besturingselementberichten met null-beëindiging
- tekenreeks gebruiken
- invoervalidatie
- wachtwoordgebruik
- beveiligingswaarschuwingen
- Verwante onderwerpen
Niet-beëindigde besturingsberichten met null
Veel van de besturingsberichten en macro's hebben tekenreeksparameters. Vaak valideren deze berichten de invoertekenreeksen niet, met name niet op een afsluit-'\0'
. Wanneer u een bericht aanroept dat een tekenreeks als parameter gebruikt, geeft u expliciet op dat de tekenreeks null-beëindigd is.
Tekenreeksgebruik
Wanneer u Windows-besturingselementen programmeert, is het noodzakelijk om tekenreeksen te bewerken. Bijna elk besturingselement vereist dat tekst wordt ingevoegd. Als u bijvoorbeeld een keuzelijst wilt vullen, moet u tekenreeksen in het besturingselement laden. Omdat het gebruik van tekenreeksen vaak bufferoverschrijdingen veroorzaakt, moet u voorzorgsmaatregelen nemen om dit beveiligingsrisico te voorkomen.
Zie Secure Code schrijven door Michael Howard en David LeBlanc, Microsoft Press, 2002 en Best Practices voor de beveiligings-API'svoor meer informatie over bufferoverschrijdingen.
Invoervalidatie
De volgende besturingsberichten kunnen beveiligingsproblemen opleveren.
- CB_GETLBTEXT
- LVM_GETISEARCHSTRING
- SB_GETTEXT
- SB_GETTIPTEXT
- TB_GETBUTTONTEXT
- TTM_GETTEXT
- TVM_GETISEARCHSTRING
Als de tekst verandert tussen de aanroep om de tekstlengte op te halen en de tijd waarop de tekst wordt weergegeven of gebruikt, kan er een bufferoverschrijding optreden. U kunt dit voorkomen door de tekenreeks te valideren voordat u deze gebruikt. Bovendien hebben de berichten die tekst ophalen, CB_GETLBTEXT, TB_GETBUTTONTEXTen TTM_GETTEXT, geen buffergrootteparameter die het potentieel voor een bufferoverschrijding weergeeft.
Wanneer u CB_GETLBTEXT of SB_GETTEXTgebruikt, moet u eerst CB_GETLBTEXTLEN of SB_GETTEXTLENGTH aanroepen om de buffergrootte te verkrijgen. Sommige van deze berichten, TB_GETBUTTONTEXT, LVM_GETISEARCHSTRINGen TVM_GETISEARCHSTRING, kunnen worden aangeroepen met een NULL-parameterwaarde om de lengte van de tekenreeks te verkrijgen voordat u het bericht aanroept om de tekenreeks op te halen.
Een bericht waaraan u bijzondere aandacht moet besteden, is de statusbalk SB_GETTIPTEXT bericht. Dit bericht biedt geen manier om een query uit te voeren op de lengte van de tekenreeks die moet worden opgehaald.
Wachtwoordgebruik
Als u besturingselementen voor bewerken met een wachtwoord (ES_PASSWORD stijl) gebruikt, moet de buffer met de opgehaalde tekst zo snel mogelijk op nul worden ingesteld om te voorkomen dat het wachtwoord van de gebruiker in het geheugen wordt weergegeven.
Beveiligingswaarschuwingen
De volgende tabel bevat functies die, indien onjuist gebruikt, de beveiliging van uw toepassingen kunnen in gevaar komen. De berichten die hier worden vermeld, bevatten geen parameter waarmee de buffergrootte wordt opgegeven.
Gelaatstrek | Verzachting |
---|---|
DlgDirListComboBox- | Zorg ervoor dat de buffer die door de functie wordt gebruikt, kan worden weggeschreven naar en is beëindigd met null. |
CB_GETLBTEXT | Roep CB_GETLBTEXTLEN aan om de buffergrootte te verkrijgen en roep CB_GETLBTEXT aan om de tekenreeks op te halen. |
LVM_GETISEARCHSTRING | Roep het bericht aan met een NULL- parameterwaarde om de buffergrootte te verkrijgen en roep het bericht vervolgens een tweede keer aan om de tekenreeks op te halen. |
SB_GETTEXT | Roep SB_GETTEXTLENGTH aan om de buffergrootte te verkrijgen en roep SB_GETTEXT aan om de tekenreeks op te halen. |
TB_GETBUTTONTEXT | Roep het bericht aan met een NULL- parameterwaarde om de buffergrootte te verkrijgen en roep het bericht vervolgens een tweede keer aan om de tekenreeks op te halen. |
TTM_GETTEXT | Dit bericht biedt geen manier om de grootte van de buffer te kennen of op te geven. |
TVM_GETISEARCHSTRING | Roep het bericht aan door een null- parameterwaarde door te geven om de buffergrootte te verkrijgen en roep vervolgens het bericht een tweede keer aan om de tekenreeks op te halen. |
Verwante onderwerpen
-
andere resources