Delen via


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.

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.

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.

 

andere resources

Microsoft Security

Security

Microsoft Security Response Center

aanbevolen procedures voor de beveiligings-API's