10 erreurs de programmation et de codage les plus courantes
Vous trouverez ci-dessous certaines des erreurs de programmation et de codage les plus courantes commises par les développeurs. Ces erreurs ont entraîné des pannes généralisées, des vols de données, des intrusions et plus encore. Certaines des erreurs Top 10 des sites Web pour les codes d'erreur et le dépannage Les 10 principaux sites Web pour les codes d'erreur et le dépannage de Read More sont spécifiques à certains langages tels que C, C ++, etc., mais certaines sont communes à d'autres langages tels que Java, JavaScript, Python, etc..
Nous vous recommandons de vérifier souvent cette liste pour vous assurer de ne pas en créer dans votre code. Cette liste est triée par ordre d'importance du haut vers le bas..
1. Dépassement de tampon
Le débordement de la mémoire tampon se produit lorsque les données sont écrites dans une mémoire tampon au-delà de sa fin. Cela peut être dû à des calculs erronés de la position d'écriture. Ou écriture continue dans un tampon sans vérifier la longueur. Quelle que soit la raison, cette erreur est l'une des plus courantes et a entraîné des exploits majeurs. Parmi ceux-ci, citons Morris Internet Worm 6 virus informatiques qui ont changé le monde 6 virus informatiques qui ont changé le monde Hier, nous avons examiné quelques-uns des virus informatiques les plus dommageables de l'histoire, et aujourd'hui nous allons explorer les plus obscurs à la place. Le terme “virus” n'était pas attaché aux logiciels malveillants… Read More en 1988, ver W32 / Nimda en 2001 et erreur Sendmail en 2003.
A C Exemple:
tableau de caractères [6] = "bonjour"; strcat (tableau, ", joe"); / * <- This line causes a buffer overflow. */
2. Injection SQL
Injection SQL Qu'est-ce qu'une injection SQL? [MakeUseOf explique] Qu'est-ce qu'une injection SQL? [MakeUseOf explique] Le monde de la sécurité Internet est en proie à des ports ouverts, des portes dérobées, des failles de sécurité, des chevaux de Troie, des vers, des vulnérabilités de pare-feu et une multitude d'autres problèmes qui nous tiennent tous sur le qui-vive tous les jours. Pour les utilisateurs privés,… Read More est une technique permettant d'injecter des commandes SQL dans une entrée utilisateur, de sorte que ces commandes soient directement exécutées par la base de données. Cela permet à l’attaquant de réaliser des actes malveillants tels que la suppression de tables, la suppression de bases de données, le vol de données, etc..
Une des principales causes de succès des attaques par injection SQL est que le logiciel d'application qui traite l'entrée utilisateur effectue des vérifications et une validation insuffisantes de l'entrée avant de la transmettre à la base de données pour exécution..
Un exemple Java:
// Ce qui suit est une valeur de paramètre avec injection SQL. String username = "joe"; supprimer de l'utilisateur où username comme "%"; Connexion con =…; // crée une connexion à la base de données // Lorsque cette instruction est exécutée, tous les utilisateurs sont supprimés de la base de données. con.createStatement (). execute ("update user set log_in = 1 où nom_utilisateur = '" + nom_utilisateur + "'");
3. Injection de commande du système d'exploitation
OS Command Injection se produit lorsque l'entrée spécifiée par l'utilisateur est directement transmise au système d'exploitation pour être examinée par l'application sans vérification préalable. Une telle opération peut être utilisée par une application pour utiliser une commande existante sur le système d'exploitation. Lorsque l'application transmet l'entrée de l'utilisateur sans la valider correctement, elle permet à un attaquant d'utiliser des constructions astucieuses pour exécuter des commandes malveillantes. Ces commandes peuvent être, par exemple, pour supprimer des fichiers, voler des données, modifier les autorisations sur des fichiers, etc..
4. Débordement entier ou enveloppant
Un entier Les bases de la programmation informatique 101 - Variables et DataTypes Les bases de la programmation informatique 101 - Variables et DataTypes Après avoir introduit et parlé un peu de la programmation orientée objet avant et de la source de son homonyme, j'ai pensé qu'il était temps de passer en revue les bases absolues de la programmation d’une manière non spécifique au langage. This… Read More Une erreur de débordement se produit lorsque vous essayez de stocker une valeur plus grande dans un type entier que ce qui convient. Lorsque cela se produit, la valeur la plus grande est tronquée et l'opération finit par stocker un résultat imprévisible. Par exemple, un short non signé de 2 octets peut stocker une valeur maximale de 65535. Imaginez maintenant l'ajout de deux valeurs courtes, telles que 65530 et 10, et l'enregistrement du résultat dans un court. Le résultat (65545) ne tient pas dans un court-métrage, laissant une valeur imprévisible dans le court-terme cible à la suite d'une troncature. En cas d'utilisation ultérieure de cette valeur dans une autre opération (telle qu'un index de tableau), vous obtiendrez des résultats imprévisibles..
A C Exemple:
court a = 65530, b = 10; court c = a + b; // sur mon ordinateur, c a la valeur inattendue: 4
5. Validation incorrecte d'un index de tableau
Une autre erreur très courante rencontrée dans le logiciel est Validation incorrecte d'un index de tableau. Cela se produit lors de l'accès à un tableau. Fonctionnement des tableaux et des listes en Python. Fonctionnement des tableaux et des listes en Python. Les tableaux et les listes sont parmi les structures de données les plus utiles en programmation. Cependant, peu de personnes les exploitent au maximum de leurs possibilités. Lisez la suite en utilisant un index situé en dehors des limites du tableau. Lorsque vous accédez à un emplacement situé en dehors des limites de données valides du programme, vous vous retrouvez avec une erreur d'accès à la mémoire (également appelée violation de segmentation). Lorsque l'emplacement de la mémoire se situe dans les limites des données mais en dehors du tableau, vous observez une corruption de la mémoire lorsque vous écrivez dans de tels emplacements..
Ce type d’erreurs est plus courant avec C et C ++, mais peut survenir avec n’importe quel langage, même avec la gestion automatique de la mémoire telle que Java, JavaScript, Python, etc. La seule façon de les atténuer dans les logiciels est de programmeur, en prenant les précautions nécessaires lors du codage.
6. Allouer des ressources sans limites
L'allocation de mémoire est très courante en C et C ++ car toute la gestion de la mémoire dans ces langages est manuelle. L'allocation de mémoire sans validation correcte de la taille allouée peut entraîner l'échec de l'allocation. Lorsque le résultat de cette allocation n'est pas vérifié, mais utilisé directement, vous disposez d'une recette pour un sinistre..
Ce type d'erreur est également possible sans gestion manuelle de la mémoire telle que Java, JavaScript et Python lors de l'allocation de tableaux. Il faut donc faire très attention lors de l'allocation de tableaux dans ces langues.
Une autre possibilité de cette erreur consiste à créer d'autres ressources telles que des descripteurs de fichier ou des descripteurs de connexion sans vérification appropriée. Ne pas fermer correctement ces ressources lorsque vous avez fini de les utiliser est le moyen le plus courant d'atteindre ces limites de ressources..
7. Déréférencement du pointeur expiré
Dans des langages tels que C et C ++, la mémoire peut être libérée une fois que vous avez terminé. Utilisation d'un pointeur Introduction aux pointeurs pour programmeurs Introduction aux pointeurs pour programmeurs Que vous le sachiez ou non, la grande majorité des programmes que vous avez utilisés utilisent les pointeurs d'une manière ou d'une autre. En tant que programmeur, vous devez comprendre comment fonctionnent les pointeurs. Lire plus sur ce bloc de mémoire déjà libéré est une erreur. Ce type d'erreur a également fait la une des journaux en raison de pannes majeures. Vous feriez donc bien de vérifier que ce type d'erreur ne se produit pas dans votre code..
8. Déréférence du pointeur nul
Un pointeur peut avoir une valeur nulle avant d'être correctement initialisé (ou après la libération de la mémoire). Le déréférencement d'un tel pointeur provoque une erreur de pointeur nulle (appelée NullPointerException en Java). C'est très courant en C, C ++ et Java, et certainement possible dans d'autres langages. Vous devez prendre suffisamment de précautions dans votre code pour éviter ce genre d'erreur..
9. Initialisation manquante
Les variables locales sont celles qui sont déclarées dans une fonction (ou un bloc) et cessent d'exister à la fin de la fonction. Ces variables sont allouées sur la pile et auront des déchets aléatoires lors de leur première déclaration. En tant que programmeur, il est de votre devoir d’affecter une valeur appropriée à ces variables dès leur déclaration. Leur utilisation avant cette initialisation entraîne la Initialisation manquante erreur et finira très certainement par un crash (ou quelque chose de plus dévastateur).
A C Exemple:
int pos; char buffer [] = "bonjour le monde"; // cette ligne peut imprimer des déchets et / ou peut provoquer le blocage du programme puisque pos n'est pas initialisé. printf ("La valeur du caractère à pos% d est:% c \ n", pos, tampon [pos]);
10. Algorithme cryptographique cassé ou risqué
Le monde de la cryptographie Comment fonctionne le chiffrement et est-il vraiment sans danger? Comment fonctionne le cryptage et est-il vraiment sûr? Lire la suite évolue constamment. Ce qui est acceptable aujourd'hui peut ne plus l'être demain. Cela pourrait être dû à la puissance croissante des ordinateurs, où les tâches informatiques qui sont censées prendre des années aujourd'hui pourraient prendre demain quelques minutes. Ou quelqu'un trouve un nouveau moyen de déchiffrer un algorithme particulier qui le rend inutile. Vous devez donc vous tenir constamment au courant des développements en cryptographie et mettre à jour votre code (s'il est toujours utilisé) si des vulnérabilités et des piratages sont découverts dans les algorithmes que vous utilisez..
Par exemple, SHA-1, qui est un algorithme de hachage, n'est plus recommandé pour le calcul des hachages. En 2005, des attaques ont été découvertes contre cet algorithme, et SHA-2 ou SHA-3 sont recommandés. Ainsi, si votre code utilise SHA-1 à un moment donné, vous devrez le remplacer par celui recommandé si le logiciel est toujours utilisé. Sinon, vous courez le risque que votre application soit ouverte aux attaques.
Résumé
Nous avons couvert quelques-unes des erreurs de programmation et de codage les plus courantes dans cet article. Vous pouvez vous référer souvent à cette liste pour vous assurer de les éviter..
Avez-vous rencontré ces erreurs ou d’autres erreurs qui pourraient conduire à un piratage à grande échelle de votre site Web ou de votre application? Faites-nous savoir dans les commentaires ci-dessous.
Crédit d'image: ajfile / Depositphotos
En savoir plus sur: Piratage.