10 Häufigste Programmier- und Codierungsfehler

10 Häufigste Programmier- und Codierungsfehler / Programmierung

Im Folgenden sind einige der häufigsten Programmier- und Codierungsfehler von Entwicklern aufgeführt. Diese Fehler haben zu weit verbreiteten Ausfällen, Datendiebstahl, Eindringlingen und mehr geführt. Einige der Fehler Top 10 Websites für Fehlercodes und Fehlerbehebung Top 10 Websites für Fehlercodes und Fehlerbehebung Weitere Informationen beziehen sich auf bestimmte Sprachen wie C, C ++ usw., andere jedoch auch auf andere Sprachen wie Java, JavaScript, Python usw..

Es wird empfohlen, diese Liste häufig zu überprüfen, um sicherzustellen, dass Sie in Ihrem Code keine Einträge machen. Diese Liste ist in der Reihenfolge ihrer Wichtigkeit von oben nach unten sortiert.

1. Pufferüberlauf

Ein Pufferüberlauf tritt auf, wenn Daten nach ihrem Ende in einen Puffer geschrieben werden. Sie kann durch fehlerhafte Berechnungen der Schreibposition entstehen. Oder fortlaufendes Schreiben in einen Puffer ohne Überprüfung der Länge. Was auch immer der Grund ist, dieser Fehler ist einer der häufigsten und hat zu großen Exploits geführt. Einige davon sind die Morris Internet Worm 6-Computerviren, die die Welt verändert haben. 6 Computerviren, die die Welt verändert haben. Gestern haben wir uns einige der schädlichsten hochkarätigen Computerviren in der Geschichte angesehen, und heute werden wir einige untersuchen die eher dunklen. Der Begriff “Virus” war nicht an Malware gebunden… Lesen Sie mehr 1988, W32 / Nimda-Wurm 2001 und Sendmail-Fehler 2003.

A C Beispiel:

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

Bildnachweis: Cyber4All @Towson

2. SQL-Injektion

SQL Injection Was ist eine SQL Injection? [MakeUseOf erklärt] Was ist eine SQL-Injektion? [MakeUseOf erklärt] Die Welt der Internetsicherheit ist mit offenen Ports, Hintertüren, Sicherheitslücken, Trojanern, Würmern, Firewall-Sicherheitslücken und einer Reihe anderer Probleme geplagt, die uns jeden Tag auf Trab halten. Für Privatanwender ist… Read More eine Technik zum Eingeben von SQL-Befehlen in Benutzereingaben, sodass diese Befehle direkt von der Datenbank ausgeführt werden. Auf diese Weise kann der Angreifer bösartige Aktionen ausführen, z. B. Tabellen löschen, Datenbanken löschen, Daten stehlen und vieles mehr.

Eine der Hauptursachen für erfolgreiche SQL-Injection-Angriffe ist, dass die Anwendungssoftware, die Benutzereingaben verarbeitet, unzureichende Überprüfungen und Überprüfungen der Eingaben durchführt, bevor sie zur Ausführung an die Datenbank übergeben werden.

Ein Java-Beispiel:

// Das Folgende ist ein Parameterwert mit SQL-Injection. String username = "joe '; vom Benutzer löschen, wobei Benutzername wie'%"; Verbindung con =…; // Verbindung zur Datenbank herstellen // Wenn diese Anweisung ausgeführt wird, werden alle Benutzer aus der Datenbank gelöscht. con.createStatement (). execute ("update user set login_in = 1, wobei Benutzername = '" + Benutzername + "'"); 

3. OS Command Injection

Die OS-Befehlseingabe tritt auf, wenn vom Benutzer angegebene Eingaben direkt an das Betriebssystem übergeben werden, um von der Anwendung geprüft zu werden, ohne dass ein ordnungsgemäßes Prüfen erfolgt. Eine solche Operation kann von einer Anwendung verwendet werden, um einen vorhandenen Befehl im Betriebssystem zu verwenden. Wenn die Anwendung Benutzereingaben übergibt, ohne sie ordnungsgemäß zu überprüfen, ebnet sie einem Angreifer die Möglichkeit, mithilfe von intelligenten Konstrukten schädliche Befehle auszuführen. Diese Befehle können beispielsweise Dateien löschen, Daten stehlen, Berechtigungen für Dateien ändern und vieles mehr.

4. Ganzzahlüberlauf oder Umlauf

Eine ganze Zahl Die Grundlagen der Computerprogrammierung 101 - Variablen und Datentypen Die Grundlagen der Computerprogrammierung 101 - Variablen und Datentypen Nachdem ich etwas über objektorientierte Programmierung beschrieben und darüber gesprochen habe, woher sein Namensvetter stammt, dachte ich, es sei an der Zeit, die absoluten Grundlagen durchzugehen nicht-sprachspezifisch programmieren. Dieser Überlauffehler tritt auf, wenn Sie versuchen, einen größeren Wert in einen ganzzahligen Typ zu speichern, als es passt. In diesem Fall wird der größere Wert abgeschnitten und die Operation speichert ein unvorhersehbares Ergebnis. Zum Beispiel kann ein 2-Byte-Short ohne Vorzeichen einen Maximalwert von 65535 speichern. Stellen Sie sich nun vor, Sie fügen zwei kurze Werte hinzu, z. B. 65530 und 10, und speichern Sie das Ergebnis in einem Short. Das Ergebnis (65545) passt nicht in einen Short, wodurch der Ziel-Short aufgrund der Kürzung unvorhersehbar bleibt. Wenn Sie diesen Wert anschließend in einer anderen Operation (z. B. einem Arrayindex) verwenden, erhalten Sie unvorhersehbare Ergebnisse.

A C Beispiel:

kurz a = 65530, b = 10; kurz c = a + b; // Auf meinem Computer hat c den unerwarteten Wert: 4 

5. Unsachgemäße Validierung eines Array-Indexes

Ein weiterer sehr häufiger Fehler in Software ist Falsche Validierung eines Array-Indexes. Es entsteht beim Zugriff auf ein Array Funktionsweise von Arrays und Listen in Python Funktionsweise von Arrays und Listen in Python Arrays und Listen sind einige der nützlichsten Datenstrukturen in der Programmierung - obwohl nur wenige Menschen sie voll ausschöpfen. Lesen Sie mehr mit einem Index, der außerhalb der Grenzen des Arrays liegt. Wenn Sie auf einen Speicherort außerhalb der gültigen Datengrenzen des Programms zugreifen, erhalten Sie einen Speicherzugriffsfehler (auch bekannt als Segmentierungsverletzung). Wenn sich der Speicherort innerhalb der Datengrenzen befindet, jedoch außerhalb des Arrays, werden beim Schreiben an solche Speicherorte Speicherfehler angezeigt.

Diese Art von Fehlern tritt häufiger bei C und C ++ auf, kann jedoch bei jeder Sprache auftreten, selbst bei der automatischen Speicherverwaltung wie Java, JavaScript, Python usw. Die Fehler können nur durch Software behoben werden Programmierer, der beim Codieren ausreichend Sorgfalt walten lässt.

6. Zuteilen von Ressourcen ohne Grenzen

Die Speicherzuordnung ist in C und C ++ sehr üblich, da die gesamte Speicherverwaltung in diesen Sprachen manuell ist. Das Zuweisen von Speicher ohne ordnungsgemäße Überprüfung der zugewiesenen Größe kann dazu führen, dass die Zuweisung fehlschlägt. Wenn das Ergebnis dieser Zuordnung nicht geprüft, sondern direkt verwendet wird, haben Sie ein Notfallrezept.

Diese Art von Fehlern ist auch ohne manuelle Speicherverwaltung wie Java, JavaScript und Python bei der Zuordnung von Arrays möglich. Bei der Zuordnung von Arrays in diesen Sprachen muss daher sorgfältig vorgegangen werden.

Eine andere Möglichkeit, dass dieser Fehler auftritt, besteht darin, andere Ressourcen wie Dateizugriffsnummern oder Verbindungszugriffspunkte ohne ordnungsgemäße Prüfung zu erstellen. Diese Ressourcen nicht ordnungsgemäß zu schließen, wenn Sie mit ihrer Verwendung fertig sind, ist der häufigste Weg, um diese Ressourcengrenzwerte zu erreichen.

7. Abgelaufene Zeigerdereferenz

In Sprachen wie C und C ++ kann der Speicher freigegeben werden, sobald Sie damit fertig sind. Zeiger verwenden Einführung in Zeiger für Programmierer Einführung in Zeiger für Programmierer Unabhängig davon, ob Sie es erkennen oder nicht, die meisten von Ihnen verwendeten Programme verwenden Zeiger auf eine bestimmte Weise. Als Programmierer müssen Sie verstehen, wie Zeiger funktionieren. Lesen Sie mehr zu diesem Speicherblock, der bereits freigegeben wurde, ist ein Fehler. Diese Art von Fehler wurde auch in den Nachrichten wegen schwerwiegender Ausfälle gemeldet. Sie sollten also sicherstellen, dass diese Art von Fehler nicht in Ihrem Code auftritt.

8. Nullzeigerdereferenz

Ein Zeiger kann einen Nullwert haben, bevor er ordnungsgemäß initialisiert wird (oder nachdem der Speicher freigegeben wurde). Die Dereferenzierung eines solchen Zeigers verursacht einen Nullzeigerfehler (wird aufgerufen NullPointerException in Java). Es ist in C, C ++ sowie Java sehr verbreitet und auf jeden Fall auch in anderen Sprachen möglich. Sie sollten in Ihrem Code genügend Vorsicht walten lassen, um derartige Fehler zu vermeiden.

Bildnachweis: J.T.Presta

9. Fehlende Initialisierung

Lokale Variablen sind solche, die innerhalb einer Funktion (oder eines Blocks) deklariert sind und am Ende der Funktion nicht mehr existieren. Diese Variablen werden auf dem Stack zugewiesen und weisen bei der ersten Deklaration einen zufälligen Speicherplatz auf. Als Programmierer ist es Ihre Pflicht, diesen Variablen sofort nach ihrer Deklaration einen geeigneten Wert zuzuweisen. Ihre Verwendung vor einer solchen Initialisierung führt dazu, dass Fehlende Initialisierung Fehler und wird definitiv mit einem Absturz enden (oder etwas verheerenderes).

A C Beispiel:

int pos; Zeichenpuffer [] = "Hallo Welt"; // Diese Zeile kann Müll ausgeben und / oder das Programm zum Absturz bringen, da pos nicht initialisiert wird. printf ("Wert des Zeichens bei pos% d ist:% c \ n", pos, Puffer [pos]); 

10. Defekter oder riskanter kryptographischer Algorithmus

Die Welt der Kryptographie Wie funktioniert Verschlüsselung und ist sie wirklich sicher? Wie funktioniert die Verschlüsselung und ist sie wirklich sicher? Read More entwickelt sich ständig weiter. Was heute akzeptabel ist, kann morgen nicht mehr akzeptabel sein. Dies könnte auf die zunehmende Leistungsfähigkeit von Computern zurückzuführen sein, bei denen Rechenaufgaben, von denen angenommen wird, dass sie Jahre dauern, morgen Minuten dauern können. Oder jemand findet einen neuen Weg, einen bestimmten Algorithmus zu knacken, der diesen Algorithmus unbrauchbar macht. Daher müssen Sie sich ständig über die Entwicklungen in der Kryptographie informieren und Ihren Code aktualisieren (sofern er noch verwendet wird), wenn in den verwendeten Algorithmen Schwachstellen und Hacks entdeckt werden.

Zum Beispiel wird SHA-1, ein Hash-Algorithmus, nicht mehr zum Berechnen von Hashes empfohlen. Im Jahr 2005 wurden Angriffe gegen diesen Algorithmus entdeckt, und SHA-2 oder SHA-3 werden empfohlen. Wenn Ihr Code an irgendeinem Punkt SHA-1 verwendet, müssen Sie ihn durch den empfohlenen ersetzen, wenn die Software noch verwendet wird. Andernfalls laufen Sie Gefahr, dass Ihre Anwendung angreifbar ist.

Zusammenfassung

In diesem Artikel haben wir einige der häufigsten Programmier- und Codierungsfehler behandelt. Sie können häufig auf diese Liste verweisen, um sicherzustellen, dass Sie sie vermeiden.

Sind Sie auf diese oder andere Fehler gestoßen, die zu einem umfangreichen Hack Ihrer Website oder Anwendung führen könnten? Lass es uns in den Kommentaren wissen.

Bild-Gutschrift: ajfile / Depositphotos

Erfahren Sie mehr über: Hacking.