10 vanligaste programmerings- och kodningsfel

10 vanligaste programmerings- och kodningsfel / Programmering

Följande är några av de vanligaste programmerings- och kodningsfel som utvecklats. Dessa fel har resulterat i stora utbrott, datatyveri, intrång och mer. Några av felen Topp 10 webbplatser för felkoder och felsökning Topp 10 webbplatser för felkoder och felsökning Läs mer är speciella för vissa språk som C, C ++ etc. men vissa är vanliga på andra språk som Java, JavaScript, Python etc.

Vi rekommenderar att du kontrollerar listan ofta för att du inte gör någon av dessa i din kod. Denna lista sorteras i storleksordningen från topp till botten.

1. Buffertöverflöde

Buffertöverflöde uppstår när data skrivs in i en buffert förbi sin ände. Det kan uppstå på grund av felaktiga beräkningar av skrivpositionen. Eller fortsätt skriva till en buffert utan att kontrollera längden. Oavsett orsaken är detta fel ett av de vanligaste och har resulterat i stora exploater. Några av dessa inkluderar Morris Internet Worm 6 Datavirus som ändrat världen 6 Datavirus som förändrat världen Igår tog vi en titt på några av de mest skadliga högprofilerade datavirusen i historien, och idag utforskar vi några av desto mer dunkla i stället. Termen “virus” var inte kopplad till skadlig kod ... Läs mer 1988, W32 / Nimda-mask i 2001 och Sendmail-fel 2003.

A C Exempel:

char array [6] = "hej"; strcat (array, ", joe"); / * <- This line causes a buffer overflow. */

Bildkrediter: Cyber4All @Towson

2. SQL-injektion

SQL-injektion Vad är en SQL-injektion? [MakeUseOf Förklarar] Vad är en SQL-injektion? [MakeUseOf Explains] Världen av Internet-säkerhet plågas med öppna portar, bakdörrar, säkerhetshål, trojaner, maskar, brandväggssårbarheter och en rad andra problem som håller oss alla på tårna varje dag. För privata användare, ... Läs mer är en teknik för att injicera SQL-kommandon i användarinmatning så att dessa kommandon utförs direkt av databasen. Detta gör det möjligt för angriparen att utföra skadliga handlingar som att ta bort tabeller, släppa databaser, stjäl data och mycket mer.

En viktig orsak till att SQL Injection attacker lyckas är att applikationsprogramvaran som behandlar användarinmatning utför otillräcklig kontroll och validering på ingången innan den skickas till databasen för att kunna utföras.

Ett Java-exempel:

// Följande är ett parametervärde med SQL-injektion String username = "Joe"; ta bort från användare där användarnamn som "%"; Anslutning con = ...; // skapa anslutning till databasen // När det här uttalandet utförs, raderas alla användare från databasen. con.createStatement (). execute ("uppdatera användarset logged_in = 1 där användarnamn = '" + användarnamn + "'"); 

3. OS Command Injection

OS Command Injection uppstår när användardefinierad ingång direkt överlämnas till operativsystemet för exekvering av programmet utan att korrekt vetting. En sådan operation kan användas av en applikation för att använda ett befintligt kommando på operativsystemet. När applikationen skickar användarinmatning utan att korrekt validera den, banar det vägen för en angripare att använda smarta konstruktioner för att utföra skadliga kommandon. Dessa kommandon kan till exempel vara att ta bort filer, stjäl data, ändra behörigheter för filer och mer.

4. Helhetsflöde eller Wraparound

En helhet Grundläggande för dataprogrammering 101 - Variabler och datatyper Grunderna i dataprogrammering 101 - Variabler och datatyper Efter att ha introducerat och pratat lite om Objektorienterad programmering före och där namnet kommer från, trodde jag att det är dags att vi går igenom de absoluta grunderna av programmering på ett annat språk än specifikt. Detta ... Läs mer Överflödesfel uppstår när du försöker spara ett större värde i en integrerad typ än vad som passar. När detta händer kortas det större värdet och operationen slutar lagra ett oförutsägbart resultat. Till exempel kan en 2-byte osignerad kort lagra ett maximalt värde på 65535. Tänk nu att du lägger till två korta värden som 65530 och 10 och lagrar resultatet i en kort. Resultatet (65545) kommer inte att passa i en kort, vilket ger något oförutsägbart värde i målet kort som ett resultat av trunkning. När du senare använder det här värdet i en annan operation (till exempel ett arrayindex) kommer du att sluta med oförutsägbara resultat.

A C Exempel:

kort a = 65530, b = 10; kort c = a + b; // på min dator har c det oväntade värdet: 4 

5. Felaktig validering av ett array-index

Ett annat mycket vanligt fel som uppstår i mjukvaran är Felaktig validering av ett array-index. Det uppstår när man får tillgång till en array Hur Arrays och Lists arbetar i Python Hur Arrays och Lists fungerar i Python Arrays och listor är några av de mest användbara datastrukturerna i programmering - även om få personer använder dem till sin fulla potential. Läs mer med hjälp av ett index som ligger utanför gränsen för matrisen. När du får tillgång till en plats utanför programmets giltiga datagränser, slutar du med ett minnesåtkomstfel (även känt som en segmenteringsbrott). När minnesplatsen ligger inom datagränserna men utanför matrisen, tittar du på minneskorruption när du skriver till sådana platser.

Dessa typer av fel är vanligare med C och C ++, men kan uppstå med vilket språk som helst, även de med automatisk minneshantering som Java, JavaScript, Python etc. Det enda sättet att sådana fel kan mildras i programvaran är av dig, den programmerare, utövar tillräcklig vård vid kodning.

6. Tilldela resurser utan gränser

Minnetilldelning är mycket vanligt i C och C ++ eftersom all minneshantering på dessa språk är manuellt. Att tilldela minne utan korrekt validering av storleken som tilldelats kan orsaka att tilldelningen misslyckas. När resultatet av denna allokering inte kontrolleras men används direkt, har du ett recept på katastrof.

Dessa typer av fel är också möjliga utan manuell minneshantering som Java, JavaScript och Python vid fördelning av arrayer. Så ordentlig vård behöver utövas vid fördelning av arrays på dessa språk.

En annan möjlighet till att detta fel uppstår är att skapa andra resurser, t.ex. filhandtag eller anslutningshandtag utan korrekt kontroll. Att inte ordentligt stänga dessa resurser när du är färdig med dem är det vanligaste sättet att dessa resursgränser uppnås.

7. Expired Pointer Dereference

På språk som C och C ++ kan minnet frigöras när du är färdig med det. Använda en pekare En introduktion till pekare för programmerare En introduktion till pekare för programmerare Oavsett om du inser det eller inte, använder de flesta programmen du använder dig av pekare på något sätt. Som programmerare måste du förstå hur pekare arbetar. Läs mer till det här minnesblocket som redan är befriat är ett fel. Denna typ av fel har också varit i nyheten på grund av stora störningar, så det skulle vara bra att verifiera att den här typen av fel inte händer i din kod.

8. Null Pointer Dereference

En pekare kan ha ett nollvärde innan det är korrekt initialiserat (eller efter att minnet är befriat). Dereferencing en sådan pekare orsakar ett nullpekarefel (kallas NullPointerException i Java). Det är mycket vanligt i C, C ++ samt Java, och definitivt möjligt på andra språk också. Du bör ta tillräcklig omsorg i din kod för att undvika denna typ av fel.

Bildkrediter: J.T.Presta

9. Saknas Initialisering

Lokala variabler är de som deklareras inom en funktion (eller ett block) och upphör att existera i slutet av funktionen. Dessa variabler fördelas på stapeln och kommer att ha slumpmässigt skräp när de först deklareras. Som programmerare är det din plikt att tilldela ett lämpligt värde till dessa variabler så fort de deklareras. Använda dem innan en sådan initialisering resulterar i Saknar initialisering fel och kommer definitivt sluta i en krasch (eller något mer förödande).

A C Exempel:

int pos; char buffert [] = "hej värld"; // den här raden kan skriva ut skräp och / eller kan krascha programmet eftersom pos inte initialiseras. printf ("Teckenvärde vid pos% d är:% c \ n", pos, buffert [pos]); 

10. Broken eller Risky Cryptographic Algorithm

Kryptografiens värld Hur fungerar kryptering och är det verkligen säkert? Hur fungerar kryptering och är det verkligen säkert? Läs mer utvecklas ständigt. Det som är acceptabelt idag är inte längre acceptabelt i morgon. Detta kan bero på den ökande kraften i datorer där beräkningsuppgifter som anses ha tagit sig idag kan ta minuter imorgon. Eller någon hittar ett nytt sätt att spricka en viss algoritm som gör den algoritmen värdelös. Så du måste hela tiden hålla dig uppdaterad om utvecklingen i kryptografi och uppdatera din kod (om den fortfarande används) om sårbarheter och hackor upptäcks i de algoritmer du använder.

Till exempel, SHA-1, som är en hashing-algoritm, rekommenderas inte längre för beräkning av hash. År 2005 upptäcktes attacker mot denna algoritm, och SHA-2 eller SHA-3 rekommenderas. Så om din kod använder SHA-1 när som helst, måste du byta ut den med den rekommenderade om programvaran fortfarande används. Annars riskerar du att din ansökan är öppen för attack.

Sammanfattning

Vi har täckt några av de vanligaste programmerings- och kodfel i den här artikeln. Du kan ofta referera till denna lista för att se till att du undviker dem.

Har du stött på dessa eller andra fel som kan leda till en storskalig hack av din webbplats eller ansökan? Låt oss veta i kommentarerna nedan.

Bildkrediter: ajfile / Depositphotos

Utforska mer om: Hacking.