IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Blocage en temps d'IPs


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Par défaut Blocage en temps d'IPs
    Bonjour

    Mon but est de pouvoir interdire la suite d'un code pour des Ips qui tentraient de revenir pendant 1 heure

    1] ouvir le fichier ips.txt
    2] contrôlée si la nouvelle ip existe ou pas
    - sauver l'ip et l'heure si elle n'existe pas
    - si l'ip existe, contrôler le temps
    - si temps inferieur à 1heure , interdire la suite du code
    - si le temps superieur à 1 heure enlever l'ip du fichier ips.txt et autoriser la suite du code

    Les parties que je n'arrive pas à développer sont:
    - Sous quelle forme sauver l'heure de l'ip avec l'ip dans le fichier texte
    - le gestion du temps pour chaque ip sauver dans le fichier txt et son retrait du fichier au bout d'une heure

    Si vous pouvez m'apporter un peu d'aide, merci
    J'aimerai que cela reste assez simple niveau codage mais je prendrai les idées qui viendront

    Voici mon début de bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    $ip_blacklist = file('ips.txt');
     
        // lecture de l'ip en cours
        $ip = isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : '';
        $ip = ip2long($ip);
     
        // test si l'ip existe
        if ( array_search($ip, $ip_blacklist) !== FALSE )
            {
            echo 'Votre IP '.long2ip($ip).' est interdite!';
            // stop le script
            exit;
        }
     
                        $fichier = fopen('ips.txt', 'a'); //On ouvre en mode 'a'
                        fwrite($fichier, $ip . "\n"); //On ajoute la ligne avec l'IP
                        fclose($fichier); //On ferme le fichier
     
        ?>
    Merci à tous

    Cordialement

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ça serait plus sérieux à faire dans une vraie base de données.

    Tu peux utiliser un timestamp ou un date au format ISO.
    Pour le retrait tu n'as pas besoin de le faire au bout d'une heure, tu peux ne le faire qu'au moment ou tu fais le contrôle.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Par défaut re
    Oui mais je suis pas assez calé en BDD pour le faire...

    Le but est de base:
    Une personne demande une info mais je veux l'empêcher de demander d'autres info avant 1 heure.

    Je préfère rester sur du php pure et gestion par fichier.

    Voici mon nouveau code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <?php
     
        // lecture de l'ip en cours
        $ip = isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : '';
        $ip = ip2long($ip);
     
            $filename = $ip.'.txt';  // Nom du fichier avec IP
            if (file_exists($filename))  // Test si fichier existe
            {
                    $ip_blacklist = file($ip.'.txt');
     
                    // test si l'ip existe
                    if ( array_search($ip, $ip_blacklist) !== FALSE )
                    {
                            //Test si IP plus d'1 heure
                            $read=file($filename);
                            date_default_timezone_set('Europe/Paris');
                            $heure_debut = strtotime($read[1]);
                            date_default_timezone_set('Europe/Paris');
                            $heure_actuelle = strtotime(gmdate('H:i', time() + 3600));
                            $resultat = strtotime(gmdate('H:i',$heure_actuelle-$heure_debut));
                            //print $resultat;
                            $base_temps = "1420934400";
                            //print '   ' . $base_temps;
                                 if ($resultat < $base_temps)
                                {
                                   echo "Attendre 1 heure";
                                   // Rediriger vers la page retour
               	                   //echo "<SCRIPT LANGUAGE='JavaScript'>document.location.href='retour.php' </SCRIPT>";
                                   exit;
                                }
                            echo "C'est bon";
                            // Rediriger vers la page suite
               	            //echo "<SCRIPT LANGUAGE='JavaScript'>document.location.href='suite.php' </SCRIPT>";
                            exit;
                     }
            } else
                        // Ajout si Nouvelle IP
                        $fichier = fopen($filename, 'a'); //On ouvre en mode 'a'
                        fwrite($fichier, $ip . "\r\n"); //On ajoute la ligne avec l'IP
                        date_default_timezone_set('Europe/Paris');
                        $heure = gmdate('H:i', time() + 3600);
                        fwrite($fichier, $heure . "\r\n"); //On ajoute la ligne avec l'heure
                        fclose($fichier); //On ferme le fichier
     
                // Suite du code si nouvelle IP
    			// Rediriger vers la page suite
               	//echo "<SCRIPT LANGUAGE='JavaScript'>document.location.href='suite.php' </SCRIPT>";
                exit;
    ?>
    Il semble fonctionner, le peu que j'ai pu le tester, mais je suis sûr qu'il peut être améliorer pour qu'il soit plus propre.

    Il reste que la partie suppression du fichier quand l'heure est révolue à mettre en place.

    Bien sûr c'est pas terrible comme principe et s'il y a 20 personnes qui demandent une info, il y a 20 fichiers qui traînent, mais le projet reste petit et n'a pas vocation d'une grande affluence non plus.

    Juste une petite aide afin de rendre ce code propre, même s'il fait dresser les cheveux des pros ou bien une solution équivalente de vrai programmeur...

    Merci

    Cordialement

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux déjà enlever les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_default_timezone_set('Europe/Paris');
    partout
    Déjà parce que ce n'est pas utile de l'écrire plusieurs et ensuite parce qu'étant donné que tu mesures seulement une différence de temps, tu n'as pas besoin de manipuler les temps GM.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Par défaut Re
    Si j'enlève les timezone , je me retrouve avec un décalage d'une heure avec le temps réel !!!! et de plus j'ai des erreurs en test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in D:\Progs\wamp\www\[ DEV ]\Site_Rencontre\Blocage_IP_Temps\test_ip.php on line 24
    Voici mon nouveaux codage presque abouti (sauf la propreté du code ) où il ne reste qu'à adapter les redirections et messages selon mon utilisation et virer les exit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    <?php
     
         // Nettoyage des fichiers IP trop anciens qui n'ont pas fait l'objet que d'une seconde demande
          $folder = new DirectoryIterator('ips/');
            foreach($folder as $file)
    	    if($file->isFile() && !$file->isDot() && (time() - $file->getMTime() > 7200)) // vieux de plus de 2 heures (2 x 3600)
    		    unlink($file->getPathname());
     
        // lecture de l'ip en cours
        $ip = isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : '';
        $ip = ip2long($ip);
     
            $filename = 'ips/'.$ip.'.txt';  // Nom du fichier avec IP
            if (file_exists($filename))  // Test si fichier existe
            {
                    $ip_blacklist = file('ips/'.$ip.'.txt');
     
                    // test si l'ip existe dans le fichier
                    if ( $ip == $ip_blacklist[0] )
                    {
                            //Test si IP plus d'1 heure
                            $read=file($filename);
                            date_default_timezone_set('Europe/Paris');
                            $heure_debut = strtotime($read[1]);
                            date_default_timezone_set('Europe/Paris');
                            $heure_actuelle = strtotime(gmdate('H:i', time() + 3600));
                            date_default_timezone_set('Europe/Paris');
                            $resultat = strtotime(gmdate('H:i',$heure_actuelle-$heure_debut));
                            $base_temps = strtotime("01:00:00");
                                // Test entre l'heure de demande et la Base de temps
                                 if ($resultat < $base_temps)
                                {
                                   echo "Vous devez Attendre 1 heure entre deux demandes";
                                   // Rediriger vers la page retour
               	                   //echo "<SCRIPT LANGUAGE='JavaScript'>document.location.href='retour.php' </SCRIPT>";
                                   exit;
                                }
                                echo "C'est bon";
                                    // Effacement du Fichier IP et Heure correspondant à l'IP demandeur
                                    unlink($filename);
                                        // Ajout IP et Heure pour cette nouvelle demande
                                        $fichier = fopen($filename, 'a'); //On ouvre en mode 'a'
                                        fwrite($fichier, $ip . "\r\n"); //On ajoute la ligne avec l'IP
                                        date_default_timezone_set('Europe/Paris');
                                        $heure = gmdate('H:i', time() + 3600);
                                        fwrite($fichier, $heure . "\r\n"); //On ajoute la ligne avec l'heure
                                        fclose($fichier); //On ferme le fichier
                                // Rediriger vers la page suite
               	                //echo "<SCRIPT LANGUAGE='JavaScript'>document.location.href='suite.php' </SCRIPT>";
                                exit;
                     }
            } else
                        // Ajout si Nouvelle IP et Heure
                        $fichier = fopen($filename, 'a'); //On ouvre en mode 'a'
                        fwrite($fichier, $ip . "\r\n"); //On ajoute la ligne avec l'IP
                        date_default_timezone_set('Europe/Paris');
                        $heure = gmdate('H:i', time() + 3600);
                        fwrite($fichier, $heure . "\r\n"); //On ajoute la ligne avec l'heure
                        fclose($fichier); //On ferme le fichier
     
                // Suite du code si nouvelle IP
    			// Rediriger vers la page suite
               	//echo "<SCRIPT LANGUAGE='JavaScript'>document.location.href='suite.php' </SCRIPT>";
                exit;
    ?>
    Merci pour les améliorations du codage pour un résultat plus pro si nécessaire. Cela reste "bourrin" par rapport à une BDD mais comme je ne maîtrise pas encore ...

    Cordialement

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Comme je t'ai dit, tu t'en moques de l'heure locale puisque tu t’intéresses au temps écoulé.
    Pour le warning, configure ton serveur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] Temps d'attente dépassé sur SocketLit.. Erreur/Blocage
    Par aureacean dans le forum WinDev
    Réponses: 0
    Dernier message: 16/01/2015, 10h48
  2. Réponses: 6
    Dernier message: 27/10/2014, 10h52
  3. [PPT-2010] blocage son et lecture automatique après un temps variable
    Par gardamon dans le forum Powerpoint
    Réponses: 3
    Dernier message: 22/10/2011, 01h12
  4. temps d'un mp3
    Par CorO dans le forum Langage
    Réponses: 6
    Dernier message: 15/09/2002, 18h43
  5. repertoire temp dynamique
    Par killpilot dans le forum C
    Réponses: 2
    Dernier message: 26/04/2002, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo