Espace membres

Bonjour Anonyme

Inscription

Email :
Mot de passe :

Mot de passe oublié ?

Nos scripts

MySpeach

MySpeach est un chat php sans base de donnée, rapide, léger et facile à prendre en main. DEMO

MyPHPUpload

MyPHPUpload est un script d'upload sécurisé écrit en PHP. DEMO

GrapAgenda

Agenda PHP et MySQL avec comptes utilisateurs et administration. DEMO

Livre PHP

Classe NoBF :: Anti Brute Force rapide et léger

Portion de code ajouté par sky le 09-08-2010

Une classe qui gère de façon très simple la détection d'attaque de type Brute Force en PHP.
Très rapide, léger et robuste !

Le système repose l'utilisation de fichiers liés au login/email.

On en parle sur le forum ici : anti brute force en PHP

Une attaque dite 'par Brute Force' selon Wikipédia :
L'attaque par force brute est une méthode utilisée en cryptanalyse pour trouver un mot de passe ou une clé. Il s'agit de tester, une à une, toutes les combinaisons possibles. Cette méthode de recherche exhaustive ne réussit que dans les cas où le mot de passe cherché est constitué de peu de caractères. Ces programmes tentent toutes les possibilités de mot de passe dans un ordre aléatoire afin de berner les logiciels de sécurité qui empêchent de tenter tous les mots de passe dans l'ordre.


Exemple d'utilisation de la classe NoBF (No Brute Force) :
<?php
$deny_access = NoBF::bruteCheck($email);

if($deny_access == true)
{
    exit('Trop de tentative de connexion détectés.');
}
else
{
    // connexion
    // ...
    if($connected == false)
    {
        echo 'Mauvais login/mot de passe.';
       
        NoBF::addTentative($email);
    }
}
?>


Classe PHP anti brute force :
<?php
define('BF_TIME_LAPS', (60*5)); // laps de temps
define('BF_DIR', './bruteforce/'); // répertoire de stockage
define('BF_NB_TENTATIVE', 5); // 5 tentative tous les TIME_LAPS

class NoBF{ // No Brute Force

    public function  __construct() {
        /* */
    }

    /*
     * Test si le nbr de tentative n'exède pas BF_NB_TENTATIVE
     * dans le laps de temps défini avec BF_TIME_LAPS
     */

    public function bruteCheck($email)
    {
        $filename = BF_DIR . $email . '.tmp';
        $deny_access = false;

        if(file_exists($filename))
        {
            $infos = NoBF::fileToArray($filename);

            $nb_tentatives = count($infos);
            $premiere_tentative = $infos[0];

            if($nb_tentatives < BF_NB_TENTATIVE)
                $deny_access = false;
            elseif($nb_tentatives > BF_NB_TENTATIVE && (BF_TIME_LAPS + $premiere_tentative) > time())
                $deny_access = true;
            else
                $deny_access = false;
        }

        return $deny_access;
    }


    public function addTentative($email)
    {
        $filename = BF_DIR . $email . '.tmp';
        $date = time();

        if(file_exists($filename))
            $infos = NoBF::fileToArray($filename);
        else
            $infos = array();

        $infos[] = $date;


        NoBF::arrayToFile($filename, $infos);
    }



    /*
     * Permet de supprimer les enregistrements trop anciens
     */

    public function cleanUp($infos)
    {
        foreach($infos as $n => $date)
        {
            if((BF_TIME_LAPS + $date) < time())
                unset($infos[$n]);
        }

        return array_values($infos);
    }

    /*
     * Récupère les infos du fichier et le sretourne unserialisé
     */

    public function fileToArray($filename)
    {
        $infos = unserialize( file_get_contents($filename) );
        $infos = NoBF::cleanUp($infos);

        return $infos;
    }

    /*
     * Enregistre les infos dans le fichier serialisé
     */

    public function arrayToFile($filename, $data)
    {
        $file = fopen ($filename, "w");
        fwrite($file, serialize($data) );
        fclose ($file);

        return true;
    }
}
?>


Cette classe est utilisé avec la classe de connexion sécurisé.

Ceci est ma première tentative.
Merci d'avance pour vos retours.

Commentaires

abderrahimstar le 18-11-2010

merci mon frere

Pseudo
Email
Commentaire

Merci d'écrire le code ici :