Mangeur de cigogne Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !


Rechercher dans le forum

Mots-clés :

Trouver :
un de ces termes tous les termes

Depuis :
7 j 15 j 30 j


Retour à l'index du forum

limiter les essais de connexion avec un login

Message original de flattazor

Le : 28/09/2008 à 20:12:51

Dejà lu 1257 fois avant vous

Bonjour à tous, voilà j'ai pris le code sur votre excelent site mais je voudrais le modifier pour faire une limite à trois essais pour la connexion. le code:

<?php
// On démarre la session
session_start();
$loginOK = false; // initialisation de login

// On n'effectue les traitement qu'à la condition que les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['nom'])) && (!empty($_POST['secret'])) ) {

//connection a la base de données
$base = mysql_connect('localhost', 'News', '0881372N') or die('impossible de se connecter à la base de données');
mysql_select_db("news", $base) or die('impossible d\'accéder à la base de données');

extract($_POST); // pour creer $nom, $secret

// On va chercher le mot de passe dans la table qui contient les informations
$sql = "SELECT User, passwrd FROM users WHERE User = '".addslashes($nom)."'";
$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);

// On vérifie que l'utilisateur existe bien
if (mysql_num_rows($req) > 0) {
// On fait une boucle pour lister les résultats dans le cas ou il y a deux personne qui ont le mm nom et le mm prenom et des mdp differentes
while ($data = mysql_fetch_array($req))
{
// On vérifie que son mot de passe est correct
if ($secret == $data ['passwrd'])
{
$loginOK = true;
}
}
}
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
echo '<center><br />identification reussite<br /></center>';
$compt = 0;
header('Location: crea_news.php');
}
else {
$compt = $compt + 1;
if ($compt == 3) {
echo 'Nombre de tentative atteinds, fermeture de la fenêtre';
$compt = 0;
sleep(1);
header('location: close_popup.php');
}
else {
header('location: login.php');
}
}
?>

Re: limiter les essais de connexion avec un login

Réponse de luce

Le : 28/09/2008 à 21:27:48

Salut,

As-tu pensé à aller voir du coté des sessions ?
Tu peux ajouter un :
$_SESSION['tentative']

Et à chaque essai, tu l'increments de 1, et si $_SESSION['tentative'] == '4', tu bloques.
Bon, le problème c'est si il ferme le navigateur à chaque tentative.
Donc, ce que tu peux aussi faire, c'est ajouter un champs "tentative" à ta base de donnée (c'est mieux), et si l'identification a échoué, tu l'incrementes de 1, et à la 4eme tentative, le compte est bloqué, tu affiches un message "Veuillez contacter le webmaster du site pour debloquer le compte".
Mais tu te retrouves à un nouveau probleme, si un emmerdeur s'ammusse à bloquer tous les comptes.

Tu peux donc utiliser une table, puis refuser la 4eme tentatives pour une même ip, mais idem, si c'est un hacker, il utilise des tonnes de proxy, donc ça ne sert à rien.

Tu peux donc imaginer un script bien complexe pour bloquer les proxys, mais il faut déjà savoir ou trouver les listes de proxy, public et privé, sans compter les zombies pc

Heu... Tu veux un peu plus d'idée ou tu abandonnes ? :-D

Re: limiter les essais de connexion avec un login

Réponse de flattazor

Le : 29/09/2008 à 19:34:35

bonjour,

je veux simple.

j'avais penser à une variable et un test "compt" mais ça ne marche pas. la fenêtre ne se ferme pas.

je ne vois pas ou ça cloche, donc je pense créer dans ma table un compteur et tester celui-ci.

Re: limiter les essais de connexion avec un login

Réponse de luce

Le : 30/09/2008 à 15:04:20

Re,


j'avais penser à une variable et un test "compt" mais ça ne marche pas. la fenêtre ne se ferme pas.


Une variable ne suffit pas, il faut utiliser dans ce cas les session :

<?php
if ((isset($_SESSION['limitation'])) && ($_SESSION['limitation'] <= 3)) {
echo 
affichage_formulaire();
} elseif ((isset(
$_SESSION['limitation'])) && ($_SESSION['limitation'] >= 4)) {
echo 
'trop de tentative';
} else {
echo 
affichage_formulaire();
?>


Et dans ton script ou de verification, tu ajoutes
<?php
if (!isset($_SESSION['limitation']))
{
$_SESSION['limitation'] = 1;
} else {
$_SESSION['limitation'] = $_SESSION['limitation'] +1;
}



Enfin, ca doit te donner quelque chose comme ça

Re: limiter les essais de connexion avec un login

Réponse de flattazor

Le : 30/09/2008 à 19:06:26

bonjour,

merci à toi, je vais essayer celà et je te tiens au courant

++

Re: limiter les essais de connexion avec un login

Réponse de flattazor

Le : 30/09/2008 à 20:04:18

Merci luce pour ton aide trés précieuse... Je n'ai aucun merite dans ce code :( mais un jour viendra ou c'est moi
qui donnera des conseils

donc je mets le code, ça peut servir à quelqu'un, ici le nombre de tentative et 3.


<?php

// On démarre la session 
session_start();
$loginOK false// initialisation de login

// On n'effectue les traitement qu'à la condition que les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['nom'])) && (!empty($_POST['secret'])) ) 
    {

    
//connection a la base de données
    
$base mysql_connect('localhost''News',  ' ') or die('impossible de se connecter à la base de données'); 
    
mysql_select_db("news"$base) or die('impossible d\'accéder à la base de données'); 

    
extract($_POST); // pour creer $nom, $secret 

    // On va chercher le mot de passe dans la table qui contient les informations
    
$sql "SELECT User, passwrd FROM users WHERE User = '".addslashes($nom)."'"
    
$req mysql_query($sql) or die('Erreur SQL : <br />'.$sql); 

    
// On vérifie que l'utilisateur existe bien 
    
if (mysql_num_rows($req) > 0) { 
                    
// On fait une boucle pour lister les résultats dans le cas ou il y a deux personne qui ont le mm nom et le mm prenom et des mdp differentes
                    
while ($data mysql_fetch_array($req)) 
                    { 
                        
// On vérifie que son mot de passe est correct 
                        
if ($secret == $data ['passwrd']) 
                        { 
                            
$loginOK true;
                        } 
                    } 

                                 }
    }

// compteur de nbre de tentative
if (!isset($_SESSION['limitation'])) 
   { 
    
$_SESSION['limitation'] = 1
   } 
else { 
    
$_SESSION['limitation'] = $_SESSION['limitation'] +1
     } 
  
// Si le login a été validé on met les données en sessions 
if ($loginOK) { 
        echo 
'<center><br />identification reussite<br /></center>';
        
sleep(3);
        
header('Location: crea_news.php'); 
            }

else {
    
// teste du nombre d'essai changer "3" sur le "if" et "elseif" pour diminuer ou augmenter le nombre de tentative

    
if ((isset($_SESSION['limitation'])) && ($_SESSION['limitation'] < 3)) 
          { 
        
header('Location: login.php');
          }
    elseif ((isset(
$_SESSION['limitation'])) && ($_SESSION['limitation'] > 3)) 
          { 
        echo 
'trop de tentative';
        
$_SESSION['limitation'] = 0//  initialisation du compteur à 0
        
sleep(3);
        
header('Location: close_popup.php');
          }
    else {     
        echo 
'trop de tentative';
        
$_SESSION['limitation'] = 0//  initialisation du compteur à 0
        
sleep(3);
        
header('Location: close_popup.php');
         }
     
     }
?>

Re: limiter les essais de connexion avec un login

Réponse de flattazor

Le : 30/09/2008 à 20:13:42

re,

oui encore et encore moi.....

un petit oubli dans mon code, oublier d'effacer le compteur en cas de réussite du login...quand on a pas de tête on a
des doigts pour taper le clavier...... et les mains pour se taper le crâne....


if ($loginOK) { 
        echo '<center><br />identification reussite<br /></center>';
        $_SESSION['limitation'] = 0;
        sleep(3);
        header('Location: crea_news.php'); 
            }



mea culpa.

Re: limiter les essais de connexion avec un login

Réponse de Ludo

Le : 01/10/2008 à 10:39:55

Bonjour,

J'ai repris le script ci-dessus avec la modif pour le compteur et j'essaie de l'adapter à mon utilisation.

J'ai une question concernant cette variable:

$_SESSION['limitation']

Comment dois-je la déclarer dans les pages précédentes ...

J'ai mis ceci au-dessus de mes pages:

<?php session_start();?>

Que dois-je rajouter pour que le code fonctionne ?

D'avance merci

Re: limiter les essais de connexion avec un login

Réponse de luce

Le : 01/10/2008 à 13:28:47

Salut,

Déjà, il ne faut JAMAIS utiliser la fonction extract() !!!!
Et encore moins quand c'est des choses provenant d'un post ou un get, parce que qu'est qu'il peut bien m'empecher d'envoyer un post ou un get avec : &jetehack=etvoila
donc, tu vas avoir :
$jetehack = "etvoila";

C'est con hein ?

Ludo, qu'est-ce que tu entends par : "Comment dois-je la déclarer dans les pages précédentes ..."

Re: limiter les essais de connexion avec un login

Réponse de Ludo

Le : 01/10/2008 à 15:07:37

Euh ouais carrément ....

Au lieu de EXTRACT je peux utiliser quoi alors ??

Ca ne va "casser" ton mon script j'espère ???

Sinon, quand je dis "Comment dois-je la déclarer dans les pages précédentes ..."

Je veux dire par là que j'ai une session_start() dans chaque page et ici (dans le script que j'ai récupéré), c'est écris:

[php]
<?php
// compteur de nbre de tentative
if (!isset($_SESSION['limitation']))
{
$_SESSION['limitation'] = 1;
}
else {
$_SESSION['limitation'] = $_SESSION['limitation'] +1;
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
echo '<center><br />identification reussite<br /></center>';
sleep(3);
header('Location: crea_news.php');
}

else {
// teste du nombre d'essai changer "3" sur le "if" et "elseif" pour diminuer ou augmenter le nombre de tentative

if ((isset($_SESSION['limitation'])) && ($_SESSION['limitation'] < 3))
{
header('Location: login.php');
}
elseif ((isset($_SESSION['limitation'])) && ($_SESSION['limitation'] > 3))
{
echo 'trop de tentative';
$_SESSION['limitation'] = 0; // initialisation du compteur à 0
sleep(3);
header('Location: close_popup.php');
}
else {
echo 'trop de tentative';
$_SESSION['limitation'] = 0; // initialisation du compteur à 0
sleep(3);
header('Location: close_popup.php');
}

}
?> [/php]

ALors que je n'ai déclarer nulle part ma variable $_SESSION['limitation'] .... je ne sais pas si je suis assez clair ...

Désolé. ..

Re: limiter les essais de connexion avec un login

Réponse de Ludo

Le : 01/10/2008 à 15:08:53

Si on ne se comprends pas je peux te passer mon numéro de tél si tu veux ...

Re: limiter les essais de connexion avec un login

Réponse de luce

Le : 01/10/2008 à 19:15:56

Re,

Bah, il faut recupèrer les variables comme il faut,
$mavariable = $_POST['mavariable'];

Idem pour les requetes sql, meme si il y a moins de risque, tu recupères les infos que tu dois recupèrer et le reste, tu t'en fou.

Dans ton script d'identification, quand tu fais le test de connexion, si ca refuse, tu mets un :

if (!isset($_SESSION['limitation']))

Ce qui signifie "Si la session limitation n'est pas présente alors..."
Et c'est la que tu l'as déclare, sinon, si elle est présente, tu ajoutes 1 à la session limitation.

Re: limiter les essais de connexion avec un login

Réponse de luce

Le : 01/10/2008 à 19:22:32

ps :
Je me permet de te rappeler que flattazor parlait d'utiliser une simple variable, et j'ai juste donné comme explication le principe à faire avec les sessions, c'est juste une idée, sans test.

Re: limiter les essais de connexion avec un login

Réponse de Ludo

Le : 01/10/2008 à 21:42:44

Bah, il faut recupèrer les variables comme il faut,
$mavariable = $_POST['mavariable'];

Ok ça j'ai bien compris mais ce que je voulais dire c'est que la variable limitation n'était pas définie avant d'etre envoyer ... enfin je crois ...

Re: limiter les essais de connexion avec un login

Réponse de luce

Le : 02/10/2008 à 18:43:06

Re,

3ème fois => Si la variable n'est pas défini (!isset) alors tu l'as défini.
Si tu t'ammusses à la définir autrement, donc basiquement, alors a chaque tentative, ca sera remis à ZERO

FadvNsFkPK

Réponse de mjzmmyjhvi

Le : 02/03/2010 à 18:57:46

CDkSgd <a href="http://hpynamwzoldp.com/">hpynamwzoldp</a>, [url=http://xdqhdflolwyx.com/]xdqhdflolwyx[/url], [link=http://lutdhgzyqqpn.com/]lutdhgzyqqpn[/link], http://mmyappaougjq.com/

Re: limiter les essais de connexion avec un login

Réponse de qDHsBaEZFg

Le : 12/03/2010 à 23:20:34

buTPor <a href="http://golyinnoyzyt.com/">golyinnoyzyt</a>, [url=http://ugjbouhtrotu.com/]ugjbouhtrotu[/url], [link=http://mrprkpwjxqfi.com/]mrprkpwjxqfi[/link], http://gnhjumcydaga.com/

NxNOkWCmYI

Réponse de qyuqujucpl

Le : 11/08/2010 à 15:03:32

j0sq05 <a href="http://cqllzevbodpa.com/">cqllzevbodpa</a>, [url=http://etbpascpqraa.com/]etbpascpqraa[/url], [link=http://acjqoqjdjbdt.com/]acjqoqjdjbdt[/link], http://mnmmslshqrzm.com/
Retour à l'index du forum


Ajouter une réponse

Nom :

Email :

Titre :

Message :

Combien font 3 + 4 ?

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Recevoir les réponses par mail :
Oui Non

Mémoriser mon nom et mon email :
Oui Non

 

Charte des forums PHPDébutant

Bienvenue à vous,

Vous voici donc prêt à poster sur les forums de PHPDébutant. Avant toute chose, merci de prendre le temps de lire les quelques lignes qui suivent.

Attention, à partir du moment ou vous postez dans les forums, vous acceptez la présente charte. Si votre message est modéré ou supprimé, vous ne pourrez pas dire que vous n'étiez pas au courant des règles !

Pourquoi une charte

Le but de cette charte est simple : que ces forums restent cordiaux et que les personnes aidant les autres ne se sentent pas lésées, insultées, critiquées. Pour que ces forums fonctionnent, il faut des personnes qui répondent aux questions. Pour que celles ci restent sur le forum, il faut les traiter avec respect, et ne pas les confondre avec des bonnes poires, esclaves, etc...

Mesures de régulation

  • Un nouveau message ne disant pas bonjour, ou insultant, dont le titre est tout en majuscules, pourra être supprimé sans justification (raisons non limitatives).
  • Prenez le temps de vérifier que la question que vous allez poser n'a pas déjà été posée, à l'aide du formulaire de recherche.
  • Prenez également le temps de vérifier que la réponse à votre question ne se trouve pas dans les tutoriaux. Nous ne pouvons pas répeter pour chaque visiteur tous les cours, il sont écrits, profitez-en (dans l'ordre tant qu'à faire) !
  • Nous ne faisons pas de scripts tout prêts. Nous aidons et vous guidons pour que vous puissiez trouver vous même la réponse, ce qui est beaucoup plus formateur.
  • Si vous comptez poster un message publicitaire, abstenez-vous. Au mieux le message sera supprimé, au pire les habitués descendront votre service en flamme.
  • Pour tout message de recrutement, précisez bien votre demande. Inutile de poster pour trouver un développeur pour faire gratuitement votre site de webmastering qui vous rapportera plein de sous. Les seuls coups de mains donnés en développement sont pour des associations ou des sujets passionnant un développeur.
  • Toute personne tenant des propos racistes ou illicites sera bannie et pourra faire l'objet de poursuites.
  • L'humour étant très présent sur ces forums, ne réagissez pas violemment à des propos qui pourraient être à prendre au second degré et avec de l'humour.
  • Attention aux trolls ! Leur multiplication peut entraîner la mort des forums, et sans forum, plus d'aide !
  • Respectez les thèmes des forums. Pensez aussi à vérifier que votre message n'a pas été déplacé si vous le croyez effacé.

Conseils

  • N'oubliez pas que les personnes à qui vous vous adressez sont des bénévoles qui donnent de leur temps pour vous. Si vous êtes méchants avec eux, il n'aideront plus et vous n'aurez plus d'aide !
  • Ne soyez pas pressé. Nous avons une vie aussi, et nous ne sommes par forcément tout le temps disponibles.
  • N'oubliez pas que les smileys sont la pour faire comprendre l'humeur dans laquelle vous rédigez un message. Il est indispensable de mettre des smileys quand vous faites de l'humour, sinon le message pourrait être mal perçu (ca serait quand même idiot de plomber l'ambiance en faisant de l'humour !).
  • Surveillez votre orthographe, nous ne vous demandons pas d'être littéraire, mais que votre message soit au moins compréhensible. Evitez à tout prix le style SMS.
  • Expliquez clairement le problème, ce n'est pas toujours facile, mais mieux vaut essayer de le faire le plus possible.
  • Ne postez pas de questions trop vagues du genre "comment faire un forum". Cela ne sert à rien, cela ne s'explique pas sur un coin de forum.
  • Mettez un titre clair, correspondant au sujet que vous allez poster. A l'aide, au secours, etc... ne sont pas d'une grande utilité pour ceux qui vont vous aider. Parfois nous passons en coup de vent, et si nous ne savons pas ce que va contenir le message, nous ne le regarderons même pas.
  • Ne mettez par [URGENT] ou autre joyeuseté du genre dans vos titres de messages. Cela irrite les gens (il y'a plus urgent dans la vie, pensez aux gens qui meurent de faim ou ayant besoin des pompiers, ça c'est urgent), et vous n'aurez pas votre réponse plus vite pour autant.
  • Si vous connaissez déjà à quel domaine votre question d'adresse (par exemple mysql, html, php, javascript), n'hésitez pas à le marquer au début de votre message, avec un [html] par exemple (notez les minuscules).
  • Ne dites pas "ça marche pas". Il y a toujours des raisons. Je vous invite à consulter le tutorial "ça marche pas" qui vous aidera à mieux expliquer votre problème.
  • Ne postez pas 36000 lignes de code. Sur le forum, le code apparaît non coloré et sans indentation, ce qui est illisible. Au dessus de 5 lignes, plus personne ne lit et vous n'aurez pas de réponse. Utilisez le wall
  • En règle générale restez courtois et clair, n'oubliez pas que la politesse fait partie de la vie courante. Il est de bon ton de dire bonjour même pour une réponse, même plusieurs fois dans la journée (ceux qui vous lisent n'ont pas forcément lu vos autres messsages)

La Fin

Avec tout ces conseils vous augmenterez les chances de réponse, leur pertinence et leur rapidité

Voilà, ça sera tout, bonne écriture :)

Fermer les règles et poster un message


www.phpdebutant.org © 2010 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement