8768 sujets

Développement web côté serveur, CMS

Bonjour,
cela fait un moment que je développe diverses petites plateformes web sans grand enjeu de sécurité. Ainsi, j'ai coutume de me contenter d'un simple hachage sha1 lorsque je dois stocker des mots de passe en base de données.
Depuis quelques temps, je travaille avec différents frameworks comme Rails ou Symfony et j'ai constaté qu'ils ne s'arrêtaient pas à un si faible degré de complexité quant au stockage de ce genre de donnée.
J'aimerais donc adopter de meilleures pratiques quand je développe moi-même ce genre de système.
Néanmoins je n'arrive pas à saisir quels sont les risques auxquels je m'expose en me contentant de générer de simples empreintes de mot de passe.

Je vous pose donc ces questions:
Pourquoi ne peut-on pas raisonnablement nous contenter d'un simple hachage ?
Quels processus ont été développés pour se protéger des éventuels risques de sécurité ?
Existe-il des normes qui encadrent la sécurité et garantissent la fiabilité d'un système ?
Y-a-t'il des références des bonnes pratiques en terme de sécurité sur le web ? (génériques, pas pour un langage ou un logiciel particulier)

Merci de votre aide Smiley smile
a écrit :
Pourquoi ne peut-on pas raisonnablement nous contenter d'un simple hachage ?


Principalement à cause des attaques dictionnaire.

Sachant que le 90% des utilisateurs ont des mots de passe particulièrement faibles genre date de naissance, numéro de téléphone, prénom, ou des mots/phrases bateau comme "iloveyou", "azerty", "soleil", "abcdef", "password", ... et que les hash de ces mots de passe hyper courants sont connus depuis longtemps, si on suppose qu'on arrive à lire ta base de données à cause d'une faille de sécurité, c'est pas 1 compte utilisateur qu'on peut compromettre en un seul coup mais des dizaines de milliers, en quelques minutes seulement.

Le moyen le plus simple de parer ça est d'utiliser un salage. En gros ça consiste à concaténer une chaîne aléatoire au mot de passe avant de le hasher, chaîne aléatoire qui est générée et stockée à la création du compte et qui ne change plus par la suite. Ca oblige un hacker à se concentrer sur un compte particulier plutôt que d'attaquer tous les comptes en même temps, et ça l'empêche de reconnaître immédiatement un hash connu.

Une autre solution consiste à hasher plusieurs fois le mot de passe avant de le stocker. Ca ralentit les accès, mais pour toi c'est relativement indolore alors que pour le ahcker, un nombre de hashage multipliés par le nombre de comptes à tester ça le ralentit passablement.

Bien sûr les deux sont combinables et le devraient.

a écrit :
Existe-il des normes qui encadrent la sécurité et garantissent la fiabilité d'un système ?


Il ne faut jamais oublier que le seul système 100% sûr est un système déconnecté et éteint. Mais il y a des normes ISO (ou d'autres) qui sont dédiées à la sécurité et qui proposent des méthodes d'évaluation plus ou moins fiables et pertinentes.

a écrit :
Y-a-t'il des références des bonnes pratiques en terme de sécurité sur le web ? (génériques, pas pour un langage ou un logiciel particulier)


A mon avis la meilleure référence en la matière doit être https://www.owasp.org/