Voici le code source résumé de ma page Web en PHP :
<?php
session_start();
if(isset($_POST['password']))
{
$mdp = htmlspecialchars($_POST['password']);
if($mdp=="Q4T1V0OO7D9A5CLG5S")
{
$_SESSION['login'] = "LOGIN";
$_SESSION['mdp'] = "PASSWORD";
echo "Identifiants corrects !";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>%20ConvertRand</title>
</head>
<body>
<p>Veuillez entrer le mot de passe :</p>
<form name="form1" action="co.php" method="post">
<input type="password" name="password" placeholder="Password" />
<input type="submit" value="OK" />
</form>
</body>
</html>
Comment éviter un bruteforcing ?
+ Non, je sais PAS mettre de captcha ni de code de confirmation ![]()
T'utilise une bdd ?
Non, j'utilise pas de SQL ni de Base de Donnée
J'utilise pas de SQL/BBD
ça importe quoi ?
Appelons {n} le nombre d'essais autorisés dans un délai de {d} secondes.
L'action de "logger" revient à persister des données (dans un fichier, en BDD ou autre, comme bon te semble).
- Pour chaque requête tu log l'IP et le timestamp.
- À chaque envoi de formulaire, tu calcules le nombre de requête pour cette IP qui ont été faites dans les {d} dernières secondes.
- Si le nombre de requêtes est supérieur ou égal à {n}, tu log l'IP en question dans un emplacement réservé aux ban (une table, un autre fichier, etc).
Et bien sûr à chaque requête, avant même de logger l'IP, tu interromps le script si l'IP est considérée comme bannie.
Pense quand même à nettoyer la liste des IP bannies au bout d'un certain temps.
vava740 il n'utilise pas de sql/bdd.
Je vois pas comment alors, par cookie ?
JvousManipule Voir le profil de JvousManipule
Posté le 13 janvier 2014 à 19:25:28 Avertir un administrateur
vava740 il n'utilise pas de sql/bdd.
Je vois pas comment alors, par cookie ?
==> En utilisant un fichier texte. ![]()
ça je peux gérer, merci à tous !
Oui un fichier texte.. et tu pourrais même rajouter un cookie en parallèle en guise de sécurité supplémentaire.
En général quand on bruteforce on envoie pas les cookies. ![]()
Oui en général, mais je parlais pas forcément de bruteforce là.
C'est un truc supplémentaire qui ne demande pas beaucoup d'effort notamment quand d'autres cas de figure se présentent.
C'est une sécurité superficielle que tu prendras plus de temps à développeur que l'attaquant à contourner. Pire encore, il ne se rendra même pas compte dans la quasi-totalité des cas.
De se protéger de vols de cookies ?
Puis même pour mettre un cookie, ça ne coûte que 2 min à rédiger un if {$_COOKIE blablaa > 5 -> header("HTTP.. 404..");} setcookie(..)
C'est superficiel, mais l'attaque par brute force n'est pas le seul moyen de "pirater" un site. Plutôt qu'utiliser un système de fichier ou bdd, autan mettre une tampo et voilà.
De plus, suffit de faire un mdp avec maj min caractere spéciaux et tu risques rien. Je vois mal un pirate lancé un programme qui tourne des jours pour cracké ton mdp, tu n'es pas la nasa.
autant*
temp*
D'ailleurs dans le livre "Sécurité PHP5 et Mysql" de Damien Seguy et Philippe Gamach, ils remmandent eux mêmes l'utilisation d'un setcookie contre les attaques par dictionnaire. (bien qu'il puisse être simplement ignoré ou effacé par le script du pirate "cependant il est étonnant de voir combien de robots d'internet respectent les cookies et sont donc enclins à le renvoyer" je cite)
De plus, suffit de faire un mdp avec maj min caractere spéciaux et tu risques rien. Je vois mal un pirate lancé un programme qui tourne des jours pour cracké ton mdp, tu n'es pas la nasa.
Bah oui, à la base il va pas se faire hacker pour un document top secret sur son site FBI. Mais si le gars bien en vient à réaliser un système gérant des IP, alors à côté ça lui coûte rien d'écrire 3 lignes pour un setcookie. Et encore mieux : sleep(1)
+1 pour le sleep.
Au passage faut arrêter avec les MDP min maj caractères spéciaux trololo, c'est pas ce qu'on fait de plus simple à retenir et à taper, et c'est pas forcément plus sécurisé.
J'avais testé ça < http://www.passweird.com/ >.
Ça m'a généré "iNf3$t3DbE11y96#0" ("facile à retenir").
D'après < http://blog.kaspersky.com/password-check/ > ça met 5227 siècles à forcer (pas mal).
Après j'ai testé "onch onch kom je boa du ponch", d'après Kapersky ça met plus de 10000 siècles.
Alors je ne sais pas comment ils calculent le truc, mais ça donne au moins une idée.
C'est vrai que _PetitPoneyDesBois0_ c ´est hard à retenir
Je parlais exclusivement des attaques par bruteforce en effet.
Le cookie reste une protection illusoire qui se fait juste totalement démonter par rapport à d'autres protections. En plus du côté totalement amateur de la chose.
« D'ailleurs dans le livre "Sécurité PHP5 et Mysql" de Damien Seguy et Philippe Gamach, ils remmandent eux mêmes l'utilisation d'un setcookie contre les attaques par dictionnaire. »
Merci de me le déconseiller, du coup.
Mettre un mot de passe compliqué suffit, oui, dans le cas où tu choisis le mot de passe, ce qui n'est pas forcément le cas de tous les sites, notamment ceux disposant d'un système d'inscription.
Le sleep(1) est également une protection illusoire.
Bah justement, il y a aussi des amateurs, des noobs qui s'aventurent dans le hack et ne se rendront même pas compte du cookie. Donc ça servira au moins à ça.
Concernant l'illusoire, même passer par un VPN, utiliser le RSA à base d'indicatrice d'Euler etc.. ne garantit pas une sécurité absolue. Néanmoins de telles mesures permettent de prévenir un risque, parfois même de le minimiser au possible.
Puis comme on l'a dit plus haut, y'a peu de chances que son site soit sujet d'attaques placées et répétées. Donc il faudrait déjà réfléchir à l'intérêt de mettre un système anti-b.force juste après avoir codé ça :
" if($mdp=="Q4T1V0OO7D9A5CLG5S")
{
$_SESSION['login'] = "LOGIN";
$_SESSION['mdp'] = "PASSWORD"; "