Sécurité des sessions

Statut
N'est pas ouverte pour d'autres réponses.
Salut à tous!!

Voilà j'ai une question pour l'ensemble des développeurs ici.

J'ai une application qui tourne avec un système de login/pass sous PHP et j'aimerais savoir comment la sécuriser contre les attaques par brute force ou autre..

En fait je fais juste un check du login/pass pour ouvrir la session mais un ami a réussi (pour ma phase de test) à rentrer par attaque "brute force" sur le login/pass.

Donc j'aimerais savoir ce que je peux faire pour éviter ça...(hormis choisir un pass plus compliqué)

j'avais pensé à un bannissement par IP de 30 min au bout de 5 tentatives mais si vous avez d'autres idées je suis ouvert!

J'ai pensé aussi implémenter le système Captcha pour le login...
Ca évitera les robots non ?
http://classes.scriptsphp.org/example.captcha.2#example

Et si vous connaissez d'autres problèmes de sécurité des sessions et leur solution je suis aussi ouvert!!

merci d'avance à vous

;)
 

Tifox

ou pas
Désactiver l'ip pour quelques minutes ne va pas empécher quelqu'un de déterminer d'y arriver (juste un poil le ralentir), il y a trop de moyen de modifier son IP.

La reconnaissance de caractère n'est pas une mauvaise idée, mais essaye de ne pas utiliser un système tout fait directement mais de le modifier, car ça permettra au tient de tenir un peu plus longtemps quand le système tout fait aura été "cassé".

Si la sécurité est doit vraiment etre importante, il faut exiger des pass long, avec chiffres-lettres-caractère spéciaux, et utiliser le http sécurisé (ce dernier point est moins évident à mettre en place).

Pense aussi a regarder du coté de SQL injection, une autre forme d'attaque pour déjouer ce genre de truc.
 

Inco

Elite
peut etre en cryptant deja le login et le pass dans la db . je sais pas si c est deja fait.

si non pour ton truc ca evitera la plus part des robots oui mais pas tous mais c'est deja mieux que rien :-D
 

La Poubelle

Pou'r allé Danché
Ton ami ne s'est pas cassé du tout la tête, tu utilises d'office une astuce facilement trouvable sur le net contre un système pré-fabriqué et d'un serveur non mis à jour.

Faille connue et non patchée, n'importe quel idiot du village peut passer à travers.
 
1er
OP
Bidibule2000

Bidibule2000

Elite
Inco a dit:
peut etre en cryptant deja le login et le pass dans la db . je sais pas si c est deja fait.

si non pour ton truc ca evitera la plus part des robots oui mais pas tous mais c'est deja mieux que rien :-D
Les pass sont déjà cryptés dans la DB mais ça ne change rien au problème d'attaque par force brute...

Je crois que je vais exiger un pass entre 6 et 8 caractères avec 2 chiffres au moins... Ca prendra déjà plus de temps ^^
 

DeScH

AstaLaVista
je dirai au moins 5 lettres car il faut moins d'une heure pour trouver un pass avec 8 chiffres.
 

Jereck

Α & Ω
Staff
Si tu veux, une petite fonction pour générer des mots de passe aléatoires


Code:
[color=palegreen][color=lime]/*[/color][/color]
[color=palegreen][color=lime]string GenPassword (int $length);[/color]
[color=lime]-Reçoit : La longueur du password à générer[/color]
[color=lime]-Retourne: Un password aléatoire[/color]
[color=lime]*/[/color]
[/color][color=royalblue]function[/color] GenPassword($length = 8) { 
	$cara = "abcdefghijklmnopqrstuvwxyz"; 
	$cara .= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	$cara .= "0123456789";
		[color=lime]// On peut aussi rajouter des caractères spéciaux[/color]
 
	[color=royalblue]for [/color]($i = 0; $i < $length; $i++) { 
		$j = [color=royalblue]rand[/color](0, 62); [color=lime]// Mettre à jour la borne supérieure si tu as modifié $cara[/color]
		$password .= $cara[$j]; 
	} 
 
	[color=royalblue]return[/color] $password; 
}

(EDIT : gaffe que GamerZ rajoute des espaces
 
S

Shrekju

ex membre
Générer un mot de passe peut empecher le brute force 'rapide' via fichier-dictionnaire. Mais pas le brute force 'pur' (bien plus long).

Code:
function genpassword( $min=8, $max=15 )
{
        $p = '';
        for($i=0;$i<rand($min,$max);$i++)
        {
                $p .= chr(rand(33,126));
        }
        return $p;
}
(Pquoi créer ce qui existe déjà ^^)

Choisissez une longueur minimum et maximum, cela prendra plus de temps au brute force s'il ne connait pas la longueur exacte du mot de passe. Utilisez également un maximum de caractère.

Pour en revenir au problème
Contrairement a ce qui a été dis précédement, le bloquage sur ip ralentit le brute force. Le fait de changer de proxy tous les 5 essais (par exemple) ralentit le brute force.

Une éventuelle solution serait de bloquer le compte après 5 mauvais mot de passe de suite. Ensuite envoyé un mail à l'adresse associée au compte pour le débloquer. L'inconvénient est que des petit casse pied pourrait passer leur temps a bloquer des comptes pour le plaisir. Certes il n'y a qu'a aller cliquer sur le lien dans le mail mais à la longue ca peut devenir embetant et l'utilisateur pourrait éventuellement finir par ne plus fréquenter le site.

Une solution qui allierait les deux serait de bloquer une ip apres 5 mauvais mot de passe et bloquer un compte apres 10 mauvaise tentatives. Ca prendrais plus de temps pour les petits casse pieds qui veulent bloquer un compte et le brute force serait bloqué.

Le code de confirmation "captcha" pourrait être une solution mais pas forcément durable.
 
1er
OP
Bidibule2000

Bidibule2000

Elite
Merci pour tous vos éclaircissements !!

j'ai chopé un bouquin au format PDF de 212 pages sur la sécurité en PHP (c'est en anglais)

je le dépose de suite sur ma table de chevet!! :-D

Si ça intéresse qqun, pm moi...
 

Carambar

Elite
Bidibule2000 a dit:
Je crois que je vais exiger un pass entre 6 et 8 caractères avec 2 chiffres au moins... Ca prendra déjà plus de temps ^^
Salut,

Niveau mot de passe, il y a les "passphrases" qui sont de mots de passe assez longs contenants des espaces. Ceux-ci seraient beaucoup plus difficile à attaquer en utilisant un dictionnaire.
 

FoX SpeEd

Touriste
ben ton pot il doit avoir un mega calculateur pcq avec un mot de passe contenant des chiffres et des lettres voir meme des caracteres spéciaux et ne sachant pas la longeur du pass tu m'expliquera comment il a fait son brut de force hein parceque pour casser un md5 en avant la musique a mon avis c'est une simple faille
 
1er
OP
Bidibule2000

Bidibule2000

Elite
Ben le mot de passe est crypté en MD5 dans la db!

Donc il suffit qu'il lance un robot avec des headers spécifiques sur la page de login et c bon...
 

AssiuM

Fan
FoX Speed : comme dit plus haut, que son mot de passe soit crypté ou pas dans la base de données, ça ne change rien du tout au problème précité.


Bidibule, voici quelques conseils que je pourrais te donner :
- utilisation de mots de passe dits "forts" (c'est à dire : au minimum 8 caractères, contenant des lettres minuscules ET majuscules, au moins 2 chiffres et au moins un caractère spécial (/, _ , | , etc ...). L'idéal étant 15 caractères, mais ce n'est pas forcément évident à imposer aux utilisateurs. Eviter aussi des mots de passe du genre : Banane_123
- utilisation d'un système "anti robots" avec une vérification de texte dans une image. Essaie de trouver une bonne classe qui fait ça, un truc compliqué voir impossible (est-ce utopique ?) à reconnaître si on est pas 'humain'.
De bons exemples sont les systèmes utilisés par yahoo (ici : http://edit.europe.yahoo.com/config...ner=&.partner=&pkg=&stepid=&.p=&promo=&.last= ) , ou microsoft (ici : https://accountservices.passport.net/reg.srf?id=2&sl=1&lc=1036 ). Comme tu peux le voir, même un humain peut parfois avoir des difficultés à reconnaître ce qui est écrit ... (pour ces deux sites là, ça va, mais j'ai déjà vu certains sites ou c'était vraiment pas évident :-9 )
- J'ai déjà vu d'autres systèmes, par pour des inscriptions, mais pour des votes, ou tu avais une image assez grande, plein de zones cliquables dedans, et tu devais cliquer sur une certaine zone pour accéder à la page suivante. (Exemple : une photo de maison, et tu dois cliquer sur la fenêtre en haut à droite...). Note qu'il faut absolument que tu aies plusieurs zones cliquables dans l'image, sinon cette méthode est inutile.

Tout ces systèmes peuvent devenir futiles sans "sanctions". Si on ne prend pas en compte la contrainte temps, les attaques par bruteforce peuvent forcer n'importe quel mot de passe. Les systèmes proposés dans ce thread sont bons : ban par ip après X tentatives, désactivation du compte après X tentatives (c'est par pour rien si ils sont utilisés par les plus gros sites internet).

Au final, je verrais bien une combinaison de tous ces systèmes :
* un accès à la page de login en sessions via une page où il faut cliquer sur une certaine zone d'une image qui changent à chaque chargement de la page (la zone et l'image)
(si plusieurs tentatives infructueuses : ban de l'ip pour X minutes).
* Dans la page de login : un bon système de reconnaissance d'image, après X tentatives infructueuses d'image ou de mot de passe , un ban ip, suivi d'une désactivation du compte (réactivation par mail nécessaire) si ça continue.
et le tout avec un mot de passe fort imposé à l'inscription.

Avec tout ça tu devrais arrêter la majorité des script kiddies, et si quelqu'un réussit à passer, c'est que vraiment il a cherché et a mis du temps, et qu'il y avait quelque chose à la clé...
 

k o D

Elite
- J'ai déjà vu d'autres systèmes, par pour des inscriptions, mais pour des votes, ou tu avais une image assez grande, plein de zones cliquables dedans, et tu devais cliquer sur une certaine zone pour accéder à la page suivante. (Exemple : une photo de maison, et tu dois cliquer sur la fenêtre en haut à droite...). Note qu'il faut absolument que tu aies plusieurs zones cliquables dans l'image, sinon cette méthode est inutile.
Hum c'est joli çà, je n'avais jamais entendu parler, je sens que çà va me servir! :cool:
 

FoX SpeEd

Touriste
Bidibule2000 a dit:
Ben le mot de passe est crypté en MD5 dans la db!

Donc il suffit qu'il lance un robot avec des headers spécifiques sur la page de login et c bon...
bon bon ben alors soit c'est moi qui suis complétement à coté de mes pompe ou bien je comprend mal parceque par exemple on prend comme mot de passe "ZeG33K" heu je peut vois dire qu'il faut deja un solide brut de force pour le casser parceque ca nous fait (26 minuscules + 26 majuscule + 10 chiffre) ^ 6 = 56800235588 possibilitées donc vue que je commence par un Z deja ce sera vers la fin qu'il trouvera le pass. Donc si on dit que le temps de une requete avec son robot pour vérifier le pass est de une seconde heuu il a le temps a mon avis de le trouver. Fin maintenant ce n'a peut etre rien a voir ce que je dit mais c'est que je n'est pas bien pigé comment sont à pu faire en "brut de force"
 

k o D

Elite
La méthode Brute Force est la plus basique. Elle va tester tout simplement toutes les possibilités. Enfin en gros, tous les mots que le script contient dans son dictionnaire.
C'est effectivement très long pour cracker un mot de passe mais çà dépend évidemment de la complexité du mot de passe.
Déjà par exemple si tu utilises un prénom fortement utilisé comme John ben il devra le cracker rapidement...

Et là MD5 ne sert à rien! Il n'attaque pas la base de donnée SQL, il ne fait qu'essayer de se connecter au site comme un utilisateur normal...
Le MD5 ne sert en fait vraiment qu'à cacher les mots de passes et les informations "prioritaires" aux personnes qui ont accès à la base SQL.
 

FoX SpeEd

Touriste
k o D a dit:
La méthode Brute Force est la plus basique. Elle va tester tout simplement toutes les possibilités. Enfin en gros, tous les mots que le script contient dans son dictionnaire.
C'est effectivement très long pour cracker un mot de passe mais çà dépend évidemment de la complexité du mot de passe.
Déjà par exemple si tu utilises un prénom fortement utilisé comme John ben il devra le cracker rapidement...

Et là MD5 ne sert à rien! Il n'attaque pas la base de donnée SQL, il ne fait qu'essayer de se connecter au site comme un utilisateur normal...
Le MD5 ne sert en fait vraiment qu'à cacher les mots de passes et les informations "prioritaires" aux personnes qui ont accès à la base SQL.
ouai ouai c'est bien ce que je disait mais ca prend une plombe :D
 
S

Shrekju

ex membre
Un petit guide sur la sécurité, pas forcément en rapport direct mais au passage tu peux faire un petit check. Les références sont interessantes aussi.
 

k o D

Elite
FoX SpeEd a dit:
ouai ouai c'est bien ce que je disait mais ca prend une plombe :D
Bah avec les ordinateurs que l'on a aujourd'hui, on considère que tu surfes en sécurité sur une page sécurisée via SSL pendant 2 minutes.
Mais bon c'est sûr que ce ne sont pas les mêmes personnes derrière que le petit hackeur ;)

Oui çà prend longtemps mais bon encore une fois, çà dépend l'enjeux :p
Je suis prêt à attendre 1 mois si je peux obtenir l'accès aux comptes en Suisse :p
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut