19 votes

Cryptage du mot de passe, stockage du mot de passe dans la session

J'ai besoin de mémoriser le mot de passe et de l'utiliser à nouveau. Je pense que ce n'est pas du tout sûr.

Scénario :

Je souhaite créer un programme de webmail où l'utilisateur se connecte avec son nom d'utilisateur et son mot de passe, puis consulte ses courriels. Cet outil n'a pas vocation à stocker les mots de passe dans la base de données. Mais en PHP, nous avons besoin de nous connecter au serveur de messagerie dans chaque page sur laquelle l'utilisateur navigue. Le nom d'utilisateur et le mot de passe sont donc nécessaires pour se connecter au serveur de messagerie. Comment cela peut-il être fait de la manière la plus sûre ?

25voto

Damon Points 26437

Depuis enregistrement du mot de passe n'est pas souhaitée, mais il n'est pas non plus souhaitable d'avoir à ressaisir le mot de passe plusieurs fois, la seule solution que je vois est la suivante :

  • Crypter le mot de passe (en utilisant par exemple AES) avec une clé aléatoire de longueur suffisante.
  • Stocker le mot de passe et le nom d'utilisateur cryptés dans la session
  • Il n'est probablement pas inutile de crypter également le nom d'utilisateur et le serveur de messagerie, juste au cas où. Cela ne fera pas de mal, et un attaquant présumé n'a pas un nom d'utilisateur connu sur un serveur.
  • Stocker la clé de cryptage dans un cookie

Ce n'est pas parfait, mais cela devrait fonctionner raisonnablement bien, et c'est probablement le meilleur compromis que l'on puisse obtenir.

À chaque requête, le navigateur de l'utilisateur envoie le cookie, le script PHP script peut utiliser le cookie pour décrypter les données stockées dans la session et effectuer une requête sur le serveur IMAP/POP.

Quelqu'un qui exploite votre serveur et accède à la mémoire de session pourra voler des mots de passe cryptés, mais si vos clés aléatoires sont d'une longueur suffisante et d'une bonne qualité aléatoire, c'est assez futile.

Le fait est que l'on ne peut vraiment sécuriser quelque chose que si l'on a une bonne connaissance de l'environnement. avec un secret que tu ne connais pas . Si vous disposez des informations nécessaires pour décrypter certaines informations (le mot de passe IMAP dans ce cas) sur votre serveur, par exemple dans la mémoire de session, toute personne exploitant votre serveur peut faire de même. Quelle que soit la puissance de votre cryptage, cela ne fait aucune différence.
La seule façon de s'assurer que les secrets restent secrets est de les crypter à l'aide de quelque chose que vous ne savez pas , ce que seul l'utilisateur (ou, dans ce cas, le navigateur de l'utilisateur) sait.

Ce qui conduit au problème insoluble qu'à un moment donné, il est évident que l'on ne peut pas faire l'économie d'une réflexion sur l'avenir de l'Europe. doivent savoir au moins pendant une fraction de seconde. C'est le temps qui s'écoule entre la réception du cookie par le serveur web et la sortie du script PHP script. En théorie, si quelqu'un ayant un accès Root lisait la mémoire du processus pendant ce laps de temps, il connaîtrait également le secret. Mais hélas, c'est quelque chose que l'on ne peut pas vraiment empêcher.
Tant que les informations ne sont jamais stockées nulle part (pas même dans la session), elles devraient être raisonnablement sûres.

Bien entendu, tout cela suppose que au moins la page de connexion de votre site (de préférence toutes) est servie via https:// et vous utilisez TLS/SSL pour communiquer avec les serveurs de messagerie. Dans le cas contraire, vous vous exposez à des attaques beaucoup plus triviales.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X