Sécurité basique en développement Web

Sécurité basique en développement Web

Beaucoup d'issues relatives à la sécurité informatique découvertes sur des sites ou applications Web trouvent leurs sources dans des erreurs de base pendant la phase de développement, voici une liste de recommandations basiques de sécurité pendant le développement:

  1. Ne jamais sauvegarder de mot de passe en clair

Ne jamais sauvegarder de mot de passe en clair ou en utilisant un algorithme de chiffrement ou hachage faible, prenez en considération que les algorithmes SHA1 et MD5 sont dépassés (même en ajoutant une chaîne de caractères aléatoire dite « salt »).

Actuellement la solution optimale disponible est d'utiliser l'algorithme de hachage « bcrypt » qui est disponible dans plusieurs langages de programmation.

Exemples :

Sur PHP à partir de la version 5.5 il est possible d'utiliser la fonction « password_hash » comme suit :

$resultat = password_hash('PASSWORD_A_CHIFFRER', PASSWORD_BCRYPT);

Avec Python et à partir de la version 2.0.0 il est possible d'installer le package « bcrypt » et de l'utiliser comme suit :

import bcrypt
$resultat = bcrypt.hashpw('PASSWORD_A_CHIFFRER', bcrypt.gensalt())
  1. Ne jamais faire confiance aux données envoyées par l'utilisateur

La plupart des développeurs savent qu'il faut désinfecter les données envoyées par les utilisateurs via les méthodes POST et GET pour se protéger contre les injections XSS et SQL, mais il faut savoir que ce ne sont pas les seules données que l'utilisateur peut altérer, voici ce qu'il faut vérifier avant d'utiliser :

  • Les « cookies » stockés sur la machine utilisateur peuvent être modifiés simplement via des plugins navigateurs ou outils spéciaux.
  • Les en-têtes HTTP peuvent aussi être altérés, exemple : le header « user-agent » qui contient les informations du client (navigateur, système d'exploitation, version…).
  • Les paramètres reçus via GET et POST.
  1. Destruction de toutes les sessions actives après réinitialisation des accès

Suite à la réinitialisation des informations des d'accès login/password via formulaire de récupération de compte, il faut systématiquement détruire toutes les sessions actives de ce compte, et ainsi garantir la sécurité du compte de l'utilisateur.

  1. Limitez les tentatives de connexions et réinitialisation de compte

Protégez les comptes de vos utilisateurs contre les attaques de type brute-force ou dictionnaire en limitant les tentatives de connexion ou en ajoutant un Captcha aux formulaires de connexion et de récupération de compte.

  1. S'assurer que les jetons de réinitialisations des comptes sont aléatoires

Il faut s'assurer que les jetons envoyés aux utilisateurs pendant l'action de récupération de compte soient aléatoires, sinon des hackers peuvent deviner l'algorithme de génération de liens de récupération et prendre possession des comptes de vos utilisateurs.