En tant que programmeur ou développeur, l'importance de créer des applications sécurisées ne peut être surestimée.
La sécurité logicielle traite de la gestion des attaques malveillantes en identifiant les vulnérabilités potentielles des logiciels et en prenant les précautions nécessaires pour s'en prémunir.
Un logiciel ne peut jamais être sécurisé à 100% car un développeur peut ignorer un bogue, créer de nouveaux bogues pour tenter de corriger des cas existants ou créer de nouvelles vulnérabilités via des mises à jour.
Cependant, il existe deux pratiques clés que tous les développeurs de logiciels peuvent utiliser pour s’assurer qu’ils créent en premier lieu un code sécurisé de création de logiciels et pour tester efficacement votre code.
Comment écrire un code sécurisé
L'écriture de code sécurisé se résume à une seule chose. Si vous pouvez anticiper chaque valeur potentielle qu'un utilisateur pourrait nourrir votre application et créer une réponse dans votre programme pour cette valeur, alors vous écrivez un code sécurisé.
C'est beaucoup plus simple que vous ne le pensez car tous les bons développeurs savent presque tout sur les applications qu'ils développent. Par conséquent, vous devez connaître toutes les valeurs dont votre application a besoin pour exécuter une tâche (les valeurs approuvées) et comprendre que toutes les autres valeurs possibles existantes sont des valeurs non approuvées.
Rédaction de code sécurisé
Supposons que vous souhaitiez créer un programme qui n'accepte que deux valeurs entières d'un utilisateur et effectue une opération d'addition sur celles-ci. Avec cette seule phrase, comme un bon développeur, vous savez maintenant tout sur votre application. Vous connaissez toutes les valeurs que ce programme acceptera (valeurs entières) et vous connaissez la tâche que ce programme accomplira (une opération d'addition).
Création du programme dans l'exemple Java
import java.util. Scanner;
classe publique Main {
// La fonction principale qui exécute le programme et collecte les deux valeurs
public static void main (String [] args) {
System.out.println ("Veuillez entrer vos deux valeurs entières:");
int value1;
int value2;
Entrée du scanner = nouveau scanner (System.in);
valeur1 = entrée.nextInt ();
valeur2 = entrée.nextInt ();
addition (valeur1, valeur2);
input.close ();
}
// la fonction qui collecte les deux valeurs et affiche leur somme
ajout de vide statique privé (int value1, int value2) {
int sum;
somme = valeur1 + valeur2;
System.out.println ("La somme des deux valeurs entières que vous avez entrées:" + somme);
}
}
Le code ci-dessus produit une application qui correspond précisément aux exigences. Lors de l'exécution, il produira la ligne suivante dans la console:
Veuillez saisir vos deux valeurs entières:
L'application restera ensuite en pause jusqu'à ce que l'utilisateur entre deux valeurs entières dans la console (ce qui signifie taper la première valeur, appuyer sur la touche Entrée et répéter).
Si l'utilisateur entre les valeurs 5 et 4 dans la console, le programme produira la sortie suivante:
La somme des deux valeurs entières que vous avez entrées: 9
C'est bien; le programme fait exactement ce qu'il doit faire. Cependant, si un utilisateur malveillant arrive et entre une valeur non entière, telle que «g», dans votre application, il y aura des problèmes. En effet, aucun code de l'application ne protège contre les valeurs non approuvées.
À ce stade, votre application plantera, créant une passerelle potentielle dans votre application pour le pirate informatique qui sait exactement quoi faire ensuite.
Sécuriser votre exemple de programme
import java.util. InputMismatchException;
import java.util. Scanner;
classe publique Main {
// La fonction principale qui exécute le programme et collecte les deux valeurs
public static void main (String [] args) {
essayer {
System.out.println ("Veuillez entrer vos deux valeurs entières:");
int value1;
int value2;
// utilisation de la classe scanner pour lire chaque entrée de l'utilisateur,
// et l'affecter à sa variable respective (lève une exception si les valeurs ne sont pas des entiers)
Entrée du scanner = nouveau scanner (System.in);
valeur1 = entrée.nextInt ();
valeur2 = entrée.nextInt ();
// appelle la fonction d'addition et lui transmet les deux valeurs
addition (valeur1, valeur2);
// ferme le flux d'entrée une fois qu'il est arrivé à la fin de son utilisation
input.close ();
// gère toutes les erreurs lancées dans le bloc try
} catch (InputMismatchException e) {
System.out.println ("Veuillez saisir une valeur entière valide.");
} catch (Exception e) {
System.out.println (e.getMessage ());
}
}
// la fonction qui collecte les deux valeurs et affiche leur somme
ajout de vide statique privé (int value1, int value2) {
int sum;
somme = valeur1 + valeur2;
System.out.println ("La somme des deux valeurs entières que vous avez entrées:" + somme);
}
}
Le code ci-dessus est sécurisé car il effectue la gestion des exceptions. Par conséquent, si vous entrez une valeur non entière, le programme se terminera correctement tout en produisant la ligne de code suivante:
Veuillez saisir une valeur entière valide.
Qu'est-ce que la gestion des exceptions?
Essentiellement, la gestion des exceptions est la version moderne de la gestion des erreurs, dans laquelle vous séparez le code de gestion des erreurs du code de traitement normal. Dans l'exemple ci-dessus, tout le code de traitement normal (ou code qui peut potentiellement lever une exception) se trouve dans un essayer bloc, et tout le code de gestion des erreurs se trouve dans attraper blocs.
Si vous regardez de plus près l'exemple ci-dessus, vous constaterez qu'il y a deux blocs catch. Le premier prend un InputMismatchException argument; il s’agit du nom de l’exception lancée si une valeur non entière est saisie. Le second prend un Exception argument, et ceci est important car son but est de détecter toute exception dans le code que le développeur n'a pas trouvée lors du test.
En rapport: Exceptions Java: les gérez-vous correctement?
Tester votre code
Vous ne devez jamais sous-estimer la puissance du test et du retest de votre code avant l'empaquetage. De nombreux développeurs (et utilisateurs de leurs applications) trouvent de nouveaux bogues une fois que le logiciel est disponible au public.
Un test minutieux de votre code vous assurera que vous savez ce que fera votre application dans tous les scénarios imaginables, et cela vous permettra de protéger votre application contre les violations de données.
En rapport: Comment décrocher votre premier travail de test de logiciel
Prenons l'exemple ci-dessus. Que faire si, une fois terminé, vous testez l'application uniquement avec des valeurs entières? Vous pouvez vous éloigner de l'application en pensant que vous avez identifié avec succès toutes les erreurs potentielles alors que ce n'est pas le cas.
Le fait est que vous ne pourrez peut-être pas identifier toutes les erreurs potentielles; c'est pourquoi la gestion des erreurs fonctionne de pair avec le test de votre code. Le test du programme ci-dessus montre qu'une erreur potentielle se produira dans un scénario spécifique.
Cependant, s'il existe une autre erreur qui ne s'est pas produite lors du test, le deuxième bloc catch dans le code ci-dessus la gérera.
Sécuriser votre base de données
Si votre application se connecte à une base de données, le meilleur moyen d'empêcher l'accès à cette base de données est de vous assurer que tous les aspects de votre application sont sécurisés. Cependant, que se passe-t-il si votre application est conçue dans le seul but de fournir une interface à ladite base de données?
C'est là que les choses deviennent un peu plus intéressantes. Dans sa forme la plus élémentaire, une base de données permet à un utilisateur d'ajouter, de récupérer, de mettre à jour et de supprimer des données. Un système de gestion de base de données est une application qui permet à un utilisateur d'interagir directement avec une base de données.
La plupart des bases de données contiennent des données sensibles, par conséquent, pour maintenir l'intégrité et limiter l'accès à ces données, il existe un contrôle d'accès obligatoire.
Contrôle d'accès
Le contrôle d'accès cherche à maintenir l'intégrité d'une base de données en définissant le type de personnes qui peuvent accéder à une base de données et en restreignant le type d'accès dont elles disposent. Par conséquent, un bon système de gestion de base de données devrait être en mesure de consigner qui accède à la base de données, à quelle heure et ce qu'ils ont fait.
Il devrait également être en mesure d'empêcher un utilisateur enregistré d'accéder ou de modifier des données avec lesquelles il n'est pas autorisé à interagir.
La sécurité logicielle est une compétence cruciale pour tous les développeurs
Développer un bon logiciel est synonyme de s'assurer que votre logiciel peut résister à toute attaque malveillante. Ceci n'est réalisable que par l'écriture d'un code sécurisé, le test continu d'une application et le contrôle de qui a accès à vos données.
Maintenant que vous savez comment sécuriser votre logiciel, vous voudrez peut-être en savoir plus sur certaines étapes de développement logiciel.
Vous vous préparez à coder votre premier programme? Assurez-vous de suivre ces étapes clés de développement logiciel.
Lire la suite
- Programmation
- La cyber-sécurité
- Conseils de codage
Kadeisha Kean est un développeur de logiciels Full-Stack et un rédacteur technique / technologique. Elle a la capacité distincte de simplifier certains des concepts technologiques les plus complexes; produire du matériel facilement compréhensible par tout novice en technologie. Elle est passionnée par l'écriture, le développement de logiciels intéressants et les voyages à travers le monde (à travers des documentaires).
Abonnez-vous à notre newsletter
Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives!
Un pas de plus…!
Veuillez confirmer votre adresse e-mail dans l'e-mail que nous venons de vous envoyer.