Säkerhetsöverväganden: Microsoft Windows-kontroller
Det här avsnittet innehåller information om säkerhetsöverväganden som rör Windows-kontrollerna. Informationen i det här avsnittet innehåller inte allt du behöver veta om säkerhetsproblem – använd den som utgångspunkt och referens för det här teknikområdet.
Sammankoppling mellan datorer är vanligt; utvecklarens främsta problem måste vara programsäkerhet. I följande avsnitt beskrivs några potentiella säkerhetsproblem att tänka på när du programmerar Windows-kontroller.
- Null-avslutade kontrollmeddelanden
- Stränganvändning
- validering av indata
- lösenordsanvändning
- säkerhetsaviseringar
- Relaterade ämnen
Null-avslutade kontrollmeddelanden
Många av kontrollmeddelandena och makrona har strängparametrar. Ofta validerar inte dessa meddelanden indatasträngarna, i synnerhet söker de inte efter en avslutande '\0'
. När du anropar ett meddelande som använder en sträng som en parameter anger du uttryckligen att strängen är null-avslutad.
Stränganvändning
När du programmerar Windows-kontroller är det nödvändigt att ändra strängar. Nästan alla kontroller kräver att text infogas. Om du till exempel vill fylla i en listruta måste du läsa in strängar i kontrollen. Eftersom användning av strängar felaktigt ofta orsakar buffertöverskridanden bör du vidta försiktighetsåtgärder för att undvika den här säkerhetsrisken.
Mer information om buffertöverskridanden finns i Writing Secure Code by Michael Howard and David LeBlanc, Microsoft Press, 2002 and Best Practices for the Security API:er.
Indataverifiering
Följande kontrollmeddelanden kan medföra säkerhetsproblem.
- CB_GETLBTEXT
- LVM_GETISEARCHSTRING
- SB_GETTEXT
- SB_GETTIPTEXT
- TB_GETBUTTONTEXT
- TTM_GETTEXT
- TVM_GETISEARCHSTRING
Om texten ändras mellan anropet för att hämta textlängden och den tid då texten visas eller används kan en buffertöverskridning inträffa. För att undvika detta måste du verifiera strängen innan du använder den. Dessutom har meddelandena som hämtar text, CB_GETLBTEXT, TB_GETBUTTONTEXToch TTM_GETTEXTingen parameter för buffertstorlek som visar potentialen för en buffertöverskridning.
När du använder CB_GETLBTEXT eller SB_GETTEXTbör du först anropa CB_GETLBTEXTLEN eller SB_GETTEXTLENGTH för att hämta buffertstorleken. Vissa av dessa meddelanden, TB_GETBUTTONTEXT, LVM_GETISEARCHSTRINGoch TVM_GETISEARCHSTRING, kan anropas med parametervärdet NULL för att hämta strängens längd innan meddelandet anropas för att hämta strängen.
Ett meddelande som du bör vara särskilt uppmärksam på är statusfältet SB_GETTIPTEXT meddelande. Det här meddelandet ger inget sätt att fråga längden på strängen som ska hämtas.
Lösenordsanvändning
Om du använder lösenordsskyddade redigeringskontroller (ES_PASSWORD formatmall) måste bufferten som innehåller den hämtade texten anges till noll så snart som möjligt för att undvika att användarens lösenord exponeras i minnet.
Säkerhetsaviseringar
I följande tabell visas funktioner som, om de används felaktigt, kan äventyra säkerheten för dina program. Meddelandena som anges här anger inte en parameter som anger buffertstorleken.
Drag | Förmildrande omständighet |
---|---|
DlgDirListComboBox | Kontrollera att bufferten som används av funktionen kan skrivas till och är null-avslutad. |
CB_GETLBTEXT | Anropa CB_GETLBTEXTLEN för att hämta buffertstorleken och anropa sedan CB_GETLBTEXT för att hämta strängen. |
LVM_GETISEARCHSTRING | Anropa meddelandet med ett NULL- parametervärde för att hämta buffertstorleken och anropa sedan meddelandet en andra gång för att hämta strängen. |
SB_GETTEXT | Anropa SB_GETTEXTLENGTH för att hämta buffertstorleken och anropa sedan SB_GETTEXT för att hämta strängen. |
TB_GETBUTTONTEXT | Anropa meddelandet med ett NULL- parametervärde för att hämta buffertstorleken och anropa sedan meddelandet en andra gång för att hämta strängen. |
TTM_GETTEXT | Det här meddelandet ger dig inget sätt att känna till eller ange buffertens storlek. |
TVM_GETISEARCHSTRING | Anropa meddelandet genom att skicka ett NULL- parametervärde för att hämta buffertstorleken och anropa sedan meddelandet en andra gång för att hämta strängen. |
Relaterade ämnen
-
andra resurser