Även de mest anspråkslösa aspekter av ett program kan presentera säkerhetshot . Grundläggande inmatning kan kortsluta ett program interna kod på olika sätt . Ingången kan använda arbetena av utskriftsfunktioner för att komma åt programmets Flödeskontrollen av tvingande gränser funktionen . Eller , kan det överskrids bufferten gränser som fastställts för den av programmeraren för att påverka data utanför dess programmerare - avsedda utrymmet . Hursomhelst , påverkar användarens input hur programmet körs , eventuellt mot illasinnade syften . Format Strings
Formatera strängar i C och C + + är en del av in-och utgångar . Formatet strängen innehåller data för att mata data till skärmen. Formatera strängar har två huvudkomponenter . Den första är den grundläggande strängen för att skriva ut , som innehåller tecken och skiljetecken . Den andra komponenten innehåller specialtecken märkt med procentuella tecken som fungerar som platshållare för variabeldata . Dessa symboler finns i strängen , och ersätts under produktionen med värden i variabler . Följande exempel illustrerar ett grundläggande printf uttalande med en formatsträng :
char x = " c " , int y = 10 ;
printf ( " Skriva ut tecken % c och decimaler % d " , , x , y ) ;
Formatsträng Attacks
otrygghet för formatsträngar ligger i hur symbolerna bäddas in i de övriga sträng referens delar av programmet . Till exempel kan en angripare in data i en variabel som används i ett format sträng injicera symboler som tillåter henne att komma åt andra ramar för genomförandet av programmet . På så sätt kan angriparen ändra värden i variabler som inte omfattas av utskriftsfunktionen . Dessutom kan angriparen tillgång möjligen värden i minnet som representerar placeringen av funktioner . Angriparen kan sedan ändra detta värde att peka på en annan funktion , vilket ändrar flödet av utförande och i huvudsak kapning programmet .
Ingångsbuffertar
Input buffertar är utrymmen av datalagring som skapats av programmeraren för att hålla data som anges av användaren. Oftast , ingångsbuffertar hanterar användarens inmatning av log in namn och lösenord . Specifikt för programspråket C , som inte omfattar infödda sträng hantering , ingångsbuffertar existera som arrayer av tecken med en uppsättning storlek . I detta fall är det upp till programmeraren att fördela data för användarens input .
Buffer Overflow
En angripare kan utnyttja begränsningarna av dessa buffertar genom översvämningar det med data . I det enklaste exemplet , innebar en mängd tecken att hålla en logg i namn kanske har 20 rum fördelade , men en angripare ger det över tjugo tecken att bearbeta . I detta fall , de extra tecken skrivs minnesplatser direkt efter uppsättningen . Dessa minnesplatser håller möjligen relevanta data programkörning , till exempel villkorliga variabler för uttalanden flödeskontroll eller referenser till funktioner på stacken . Liksom formatsträng attack , gör detta i huvudsak för angriparen att kapa programmet .