Je viens à vous car j’ai une petite question concernant la sécurisation d’un espace membre.
Je précise que j’ai lu pas mal d’article sur la sécurité en PHP.
Préambule :
Je développe actuellement une application pourvue d’un espace membre et je me pose la question quand à la bonne pratique de l’utilisation de l’option « Se souvenir de moi ».
Actuellement, lorsqu’un membre s’identifie et coche cette case, je génère un cookie.
Celui-ci contient l’identifiant et le mot de passe de l’utilisateur (je précise que le contenu du cookie est crypté par une fonction de cryptage utilisant l’algorithme RIJNDAEL qui utilise une clé de cryptage et un vecteur d’initialisation de 32 caractères chacun. Ces deux clé sont généré automatiquement lors de l’installation de l’application et son contenue dans la base de données).
Lorsque le membre reviens sur le site, je lis les informations du cookie, je les décryptes et je les comparent à celles de la base de données, si tout est correct, j’autorise la connexion.
Le contenu des sessions est lui aussi crypté et stocké soit dans un répertoire spécifique de l’application soit dans la base de données (cela dépend des paramètres de configurations de l’application)
J’utilise entre autre les paramètres suivants concernant les sessions :
ini_set('session.cookie_httponly', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.use_trans_sid', 0) ;
ini_set('session.hash_function' , 1);
Questions :
Si le cookie est volé, on sait se connecter -> Comment l’éviter ?
SI le cookie est modifié - selon je doute car sans connaitre la clé de cryptage, c’est tout de même un peu difficile – on sait se connecter -> Comment l’éviter ?
Pour vérifier la modification je pensais générer un hash du contenu et conserver celui-ci afin de le comparer au contenu du cookie avant d’utiliser les données ? Qu’en pensez-vous ?
Tout d'abord celà: il n'y a pas de sécurité absolue, mais ça je pense que tu le sais...
L'utilisation d'un "remind me" est de plus une chose qui provoque l'une ou l'autre possibilité de hack... (rien que tu n'ai pas cité dans ton post...)
Quand à la "bonne pratique";
ne jamais envoyer - même sous forme cryptée - le mot de passe à l'utilisateur (que ce soit pour ce genre de cs où pour une procédure de RAZ de son mot de passe par exemple!), donc pour ton cookie, comme pour ta bdd, ne sauvegarde pas les mots de passes en clair si c'est évitable!
Pour ce qui est du vol de cookie, c'est un risque, si il est trop grand pour ton application, la fonction "remind me" est à proscrire!
Une chose que tu pourrais néanmoins faire, c'est comparer aussi le User-agent (type de navigateur + version etc) qui ne devrais pas changer sans arrêt! C'est peut-être facilement modifiable, mais il faut être au courant de la procédure ;)
J'espère t'avoir donné quelques informations ;)
Cordialement,
Pour la vérification du cookie c'est une pratique qui a lieue d'être, mais je pense que le plus "sur" est de ne pas sauvegarder d'informations assez importantes (pour être vérifiées de cette façon) dans un cookie...