10 Meest voorkomende programmeer- en codeerfouten

10 Meest voorkomende programmeer- en codeerfouten / Programming

De volgende zijn enkele van de meest voorkomende programmeer- en codeerfouten gemaakt door ontwikkelaars. Deze fouten hebben geleid tot wijdverbreide uitval, gegevensdiefstal, inbraken en meer. Enkele van de fouten Top 10 websites voor foutcodes en probleemoplossing Top 10 websites voor foutcodes en probleemoplossing Meer lezen zijn met name van toepassing op bepaalde talen, zoals C, C ++, etc. maar sommige zijn gangbaar in andere talen zoals Java, JavaScript, Python enz..

We raden u aan deze lijst regelmatig te controleren om er zeker van te zijn dat u deze niet in uw code opneemt. Deze lijst wordt gesorteerd in de volgorde van belangrijkheid van boven naar beneden.

1. Bufferoverloop

Bufferoverloop treedt op wanneer gegevens voorbij het einde in een buffer worden geschreven. Het kan ontstaan ​​door foutieve berekeningen van de schrijfpositie. Of continu schrijven in een buffer zonder de lengte te controleren. Wat de reden ook is, deze fout is een van de meest voorkomende en heeft geleid tot grote exploits. Sommigen hiervan zijn de Morris Internet Worm 6 computervirussen die de wereld veranderden 6 Computervirussen die de wereld veranderden Gisteren hebben we een aantal van de meest schadelijke computervirussen in de geschiedenis bekeken en vandaag zullen we enkele van deze virussen verkennen. de meer obscure in plaats daarvan. De voorwaarde “virus” was niet gekoppeld aan malware ... Lees meer in 1988, W32 / Nimda-worm in 2001 en Sendmail-fout in 2003.

A C Voorbeeld:

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

Afbeelding tegoed: Cyber4All @Towson

2. SQL-injectie

SQL-injectie Wat is een SQL-injectie? [MakeUseOf Explains] Wat is een SQL-injectie? [MakeUseOf Explains] De wereld van internetbeveiliging wordt geplaagd door open poorten, achterdeurtjes, gaten in de beveiliging, Trojaanse paarden, wormen, kwetsbaarheden voor firewalls en een hele reeks andere problemen die ons dagelijks scherp houden. Voor privé-gebruikers is ... Read More een techniek voor het injecteren van SQL-opdrachten in gebruikersinvoer, zodat deze opdrachten rechtstreeks door de database worden uitgevoerd. Hierdoor kan de aanvaller kwaadaardige acties uitvoeren zoals het verwijderen van tabellen, het laten vallen van databases, het stelen van gegevens en nog veel meer.

Een belangrijke oorzaak van het slagen van SQL Injection-aanvallen is dat de applicatiesoftware die de gebruikersinvoer verwerkt onvoldoende controles en validatie uitvoert op de invoer voordat deze wordt doorgegeven aan de database voor uitvoering.

Een Java-voorbeeld:

// Het volgende is een parameterwaarde met SQL-injectie String gebruikersnaam = "joe"; verwijderen van gebruiker waarbij gebruikersnaam zoals '%'; Verbinding con = ...; // maak verbinding met database // Wanneer deze instructie wordt uitgevoerd, worden alle gebruikers uit de database verwijderd. con.createStatement (). execute ("update gebruikersset logged_in = 1 waarbij gebruikersnaam = '" + gebruikersnaam + "'"); 

3. OS Command Injection

OS Command Injection ontstaat wanneer door de gebruiker opgegeven invoer direct wordt overgedragen aan het besturingssysteem voor exectie door de toepassing zonder juiste controle. Een dergelijke bewerking kan door een toepassing worden gebruikt om een ​​bestaande opdracht op het besturingssysteem te gebruiken. Wanneer de toepassing de gebruikersinvoer passeert zonder deze juist te valideren, maakt dit de weg vrij voor een aanvaller om slimme constructies te gebruiken om kwaadwillige opdrachten uit te voeren. Deze opdrachten kunnen bijvoorbeeld zijn om bestanden te verwijderen, gegevens te stelen, machtigingen voor bestanden te wijzigen en meer.

4. Integer-overloop of omwikkeling

Een integer De basisprincipes van computerprogrammering 101 - Variabelen en datatypes De basisprincipes van computerprogrammering 101 - Variabelen en datatypes Nadat ik iets over Object Oriented Programming geïntroduceerd en besproken heb voor en waar zijn naamgenoot vandaan komt, dacht ik dat het tijd is om de absolute basis door te nemen van programmeren op een niet-taalspecifieke manier. This ... Lees Meer Overflow error treedt op wanneer u probeert een grotere waarde op te slaan in een integraal type dan past. Wanneer dit gebeurt, wordt de hogere waarde afgekapt en de bewerking eindigt met het opslaan van een onvoorspelbaar resultaat. Een niet-ondertekende short van 2 bytes kan bijvoorbeeld een maximale waarde van 65535 opslaan. Stel u nu twee korte waarden, zoals 65530 en 10, toe en sla het resultaat kort op. Het resultaat (65545) past niet in een korte, waardoor een aantal onvoorspelbare waarde in het doel kort als gevolg van truncatie. Wanneer u deze waarde vervolgens in een andere bewerking (zoals een arrayindex) gebruikt, krijgt u onvoorspelbare resultaten.

A C Voorbeeld:

korte a = 65530, b = 10; kort c = a + b; // op mijn computer heeft c de onverwachte waarde: 4 

5. Onjuiste validatie van een array-index

Een andere veel voorkomende fout die wordt aangetroffen in software is Onjuiste validatie van een array-index. Het ontstaat wanneer een array wordt benaderd Hoe Arrays en lijsten werken in Python Hoe arrays en lijsten werken in Python Arrays en lijsten zijn enkele van de meest bruikbare datastructuren in programmeren - hoewel maar weinig mensen ze gebruiken om hun volledige potentieel te benutten. Meer lezen met een index die buiten de grenzen van de array valt. Wanneer u een locatie opent buiten de geldige gegevensgrenzen van het programma, krijgt u een geheugentoegangsfout (ook bekend als een segmentatiestand). Wanneer de geheugenlocatie binnen de gegevensgrenzen ligt, maar buiten de array, wordt u geconfronteerd met geheugenbeschadiging wanneer u naar dergelijke locaties schrijft.

Dit soort fouten komt vaker voor bij C en C ++, maar kan zich voordoen met elke taal, zelfs met automatisch geheugenbeheer zoals Java, JavaScript, Python, enz. De enige manier waarop dergelijke fouten in software kunnen worden beperkt, is door u, de programmeur, voldoende zorgzaam tijdens het coderen.

6. Resources zonder grenzen toewijzen

Geheugentoewijzing is heel gebruikelijk in C en C ++ omdat alle geheugenbeheer in deze talen handmatig is. Het toewijzen van geheugen zonder de juiste validatie van de toegekende grootte kan ertoe leiden dat de toewijzing mislukt. Wanneer het resultaat van deze toewijzing niet wordt gecontroleerd maar direct wordt gebruikt, hebt u een recept voor een ramp.

Dit type fouten is ook mogelijk zonder handmatig geheugenbeheer, zoals Java, JavaScript en Python bij het toewijzen van arrays. Daarom moet de juiste zorg worden betracht bij het toewijzen van arrays in deze talen.

Een andere mogelijkheid dat deze fout optreedt, is om andere bronnen, zoals bestandshandvatten of verbindingshandvatten, te maken zonder de juiste controle uit te voeren. Het niet correct afsluiten van deze bronnen wanneer u klaar bent, is de meest gebruikelijke manier waarop deze resourcelimieten worden bereikt.

7. Verlopen aanwijzer Dereference

In talen zoals C en C ++ kan het geheugen worden vrijgegeven zodra u klaar bent. Een aanwijzer gebruiken Een inleiding tot aanwijzers voor programmeurs Een inleiding tot aanwijzers voor programmeurs Of u het nu beseft of niet, het overgrote deel van de programma's die u hebt gebruikt, gebruikt op een of andere manier pointers. Als programmeur moet je begrijpen hoe pointers werken. Meer lezen voor dit blok geheugen dat al is vrijgegeven, is een fout. Dit type fout is ook in het nieuws geweest vanwege grote storingen, dus u zou er goed aan doen om te controleren of dit soort fouten niet in uw code voorkomen.

8. Null Pointer Dereference

Een aanwijzer heeft mogelijk een ongeldige waarde voordat deze correct is geïnitialiseerd (of nadat het geheugen is vrijgegeven). Het afleiden van een dergelijke pointer veroorzaakt een nul-wijzerfout (genaamd NullPointerException in Java). Het is heel gebruikelijk in C, C ++ en Java, en zeker ook in andere talen mogelijk. U moet voldoende voorzichtig zijn in uw code om dit soort fouten te voorkomen.

Afbeelding tegoed: J.T.Presta

9. Ontbrekende initialisatie

Lokale variabelen zijn variabelen die worden gedeclareerd binnen een functie (of een blok) en ophouden te bestaan ​​aan het einde van de functie. Deze variabelen worden toegewezen aan de stapel en krijgen willekeurige rommel als ze voor het eerst worden gedeclareerd. Als een programmeur is het uw plicht om een ​​geschikte waarde toe te kennen aan deze variabelen zodra ze zijn gedeclareerd. Als u ze gebruikt vóór een dergelijke initialisatie, resulteert dit in Ontbrekende initialisatie fout en zal zeker eindigen in een crash (of iets verwoesters).

A C Voorbeeld:

int pos; char buffer [] = "hallo wereld"; // deze regel kan afval afdrukken en / of kan het programma doen crashen, omdat pos niet is geïnitialiseerd. printf ("Tekenwaarde bij pos% d is:% c \ n", pos, buffer [pos]); 

10. Gebroken of riskant cryptografisch algoritme

De wereld van cryptografie Hoe werkt encryptie en is het echt veilig? Hoe werkt versleuteling en is het echt veilig? Read More is constant aan het evolueren. Wat vandaag acceptabel is, is morgen misschien niet meer acceptabel. Dit kan te wijten zijn aan de toenemende macht van computers waar computertaken die geacht worden jaren in beslag te nemen vandaag misschien minuten in beslag nemen. Of iemand vindt een nieuwe manier om een ​​bepaald algoritme te kraken dat dat algoritme nutteloos maakt. Dus je moet voortdurend op de hoogte blijven van ontwikkelingen in cryptografie en je code updaten (als het nog steeds in gebruik is) als kwetsbaarheden en hacks worden ontdekt in de algoritmen die je gebruikt.

SHA-1, dat een hash-algoritme is, wordt bijvoorbeeld niet langer aanbevolen voor het berekenen van hashes. In 2005 werden aanvallen tegen dit algoritme ontdekt en wordt SHA-2 of SHA-3 aanbevolen. Dus als uw code op enig moment SHA-1 gebruikt, moet u deze vervangen door de aanbevolen versie als de software nog steeds in gebruik is. Anders loop je het risico dat je applicatie openstaat voor aanvallen.

Samenvatting

We hebben enkele van de meest voorkomende programmeer- en codeerfouten in dit artikel besproken. U kunt deze lijst vaak raadplegen om er zeker van te zijn dat u ze vermijdt.

Bent u deze of andere fouten tegengekomen die zouden kunnen leiden tot een grootschalige hack van uw website of applicatie? Laat het ons weten in de comments hieronder.

Beeldcredits: ajfile / Depositphotos

Ontdek meer over: Hacking.