Skrivning till buffertar är en rutinmässig del av alla program att fungera , och även en viktig källa för potentiella problem . När ett program försöker lägga mer data i en buffert än dess programmerare konstruerade den för att hålla , kan den efterföljande översvämningen av data korrupta andra programdata . Detta kan leda till program kraschar , eller potentiellt ett sätt för hackare att kapa programmet och köra skadlig kod . Buffertar och Överflöden
En buffert är en array variabel för att lagra data för programmet att använda vid ett senare tillfälle i sitt utförande . Det kan vara information som en användare skriver in i programmet , kan innehållet i en fil som programmet läser in , eller något annat program behöver köra . Buffertar är skapade med en viss storlek , som är reserverad i en dators minne för att lagra buffertens data. Buffertspill inträffar när ett program skriver en mängd data till en buffert som överstiger dess verkliga storlek , vilket gör att programmet för att skriva data förbi bufferten läge i datorns minne och till minnet reserveras för andra buffertar eller variabler .
kraschar
ett program kraschar när den finner sig oförmögen att utföra den uppgift som den har kodats för att prestera på en viss tidpunkt , och dess utvecklare inte inkludera en mekanism för att återhämta sig från en sådan ett misslyckande . Buffertspill kan leda till att program kraschar när overflow korrumperar variabel data som lagras i en närliggande minneskortplats . Till exempel , om ett överflöd av en text bufferten kan skriva texttecken över de nummer som lagrats i en heltalsvariabel minne kortplats. När programmet anropar denna variabel data för att utföra en beräkning , finner det texttecknen istället för siffror . Programmet kan inte utföra matematiska beräkningar på texttecken , så att programmet skulle reagera genom att krascha .
Säkerhetsbrister
advertentm buffert överbelastning kan leda till att program kraschar , men hackare skulle medvetet tvinga en buffert överbelastning att kompromissa programmets funktion . Till exempel kan en buffert minne slot vara nära minnesplatsen som håller ett visst kommando programmet exekverar . En hacker kan upptäcka storleken på bufferten , och avståndet till kommandot minne kortplats från slutet av bufferten . Han kunde sedan tvinga en buffer overflow som skulle skriva över data mellan buffert och kommandot minne kortplats , sedan skriva över kommandot minne kortplats för att ersätta kommandot med en av hans egna design. När programmet anropar det kommandot minne kortplats och exekverar dess innehåll , skulle det vara att köra hacker kod istället för den programmeraren avsett .
Förhindra buffertspill
Programmerare kan förhindra buffertspill genom att införa säkerhetsmekanismer för att se till att programmet inte försöka skriva mer data till en buffert än han designade den att hålla . Dessa kan omfatta kontroll av storleken på de data användare försöker sätta in den , genom att skriva eller välja en indatafil , för att säkerställa att det inte överstiger storleken på bufferten . Programmerare bör också försöka minimera de möjligheter som användarna har att skriva data direkt till en buffert , eftersom varje ingång som skriver direkt till en buffert är en potentiell vektor för en buffert överbelastning attack .