begin process at 2012 02 15 23:40:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Aide & documentation

 > 

protection anti-flood


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

protection anti-flood

mercredi 7 janvier 2009 à 09:32:02 | protection anti-flood

sebrs1

salut,
J'ai un site web avec un forum perso pas très évolué et il fait l'objet de flood  de robots
j'ai mis une protection anti robot,c'est une question aléatoire a laquelle il faut répondre (genre "combien font 3+4?")
j'ai du mettre ça en route y'a 3 jours et ce matin j'avais de nouveau 3 message de flood (que j'ai enlevé)
Vous n'auriez pas une idée pour protéger un peux mieu mon truc?

Mon site web : http://tidus25.free.fr

Seb.

PS : si à tout hasard, il vous prend un folle envie de cliquer sur la pub google de mon site, faut surtout pas se gêner :)
mercredi 7 janvier 2009 à 10:00:40 | Re : protection anti-flood

kohntark

Membre Club
Salut,

Une idée pour protéger un peu plus ? ... faudrait avoir un peu plus de code (comment est générée la question, comment est traitée la réponse, etc ...)
Je pense plus à une faille dans ton système qu'à une réelle analyse de ton anti flood par le robot

Kohntark-
mercredi 7 janvier 2009 à 10:05:25 | Re : protection anti-flood

sebrs1

alors j'ai une table dans ma bdd avec toute les question et les reponse. chaque question a une cle primaire(fixe) et une numero par lesquelles elle sont appelée et qui change aleatoirement a chaque fois que je valide un formulaire (pour eviter qu'on puisse associer un numero a une réponse).
dans mon formulaire, j'affiche la question, un champs pour la réponse et un champs hidden pour le numero de la question. et quand je valide le formulaire je vais chercher la reponse en base et je compare avec la réponse du formulaire.
mercredi 7 janvier 2009 à 10:32:31 | Re : protection anti-flood

kohntark

Membre Club
Je pense que la philosophie est bonne et qu'un robot générique ne doit pas pouvoir passer.
Il est toutefois assez simple de contourner ton système :

Combien font 5+4?
=> une petite regex qui ne retient que les calculs et le tour est joué

Tapez ordinateur, Écrivez bandeira, Écrivez benfica
=> un parse sur le dernier mot et le tour est joué

Avec mes faibles compétences je te fais un robot qui passe tes protections en moins d'une demie heure.

Mais je reste sur ce que je disais : il y a peut être une faille qui permet au robot de ne même pas remplir ces champs. Mais pour le savoir il faut voir le code.

Cordialement,


Kohntark -

mercredi 7 janvier 2009 à 13:26:33 | Re : protection anti-flood

sebrs1

voici donc mon code
premierement, les fonction pour acceder et verifier les codes :
function getQuestionVerif($numero)
{
    $reqGetQuestion = "SELECT descVerif FROM VERIF WHERE numeroVerif=".$numero;
    $resGetQuestion = mysql_query($reqGetQuestion) or die($reqGetQuestion." : ".mysql_error());
    $TableGetQuestion = mysql_fetch_array($resGetQuestion);
    return $TableGetQuestion["descVerif"];
}

function getReponseVerif($numero)
{
    $reqGetReponse = "SELECT reponseVerif FROM VERIF WHERE numeroVerif=".$numero;
    $resGetReponse = mysql_query($reqGetReponse) or die($reqGetReponse." : ".mysql_error());
    $TableGetReponse = mysql_fetch_array($resGetReponse);
    return $TableGetReponse["reponseVerif"];
}

function testVerif($numero,$repUser)
{
    if (strtolower($repUser) == strtolower(getReponseVerif($numero)))
    {
        reinitVerif($numero);
        return true;
    }
    else
    {
        reinitVerif($numero);
        return false;
    }
}

function reInitVerif($numeroBase)
{
    $exist = true;

    while ($exist)
    {
        $newNum = rand(0,500);
        $reqGetExists = "SELECT COUNT(*) as total FROM VERIF WHERE numeroVerif=".$newNum;
        $resGetExists= mysql_query($reqGetExists) or die($reqGetExists." : ".mysql_error());
        $TableGetExists = mysql_fetch_array($resGetExists);
        if ($TableGetExists["total"] == 0)
            $exist = false;
    }
    $reqGetMaj = "UPDATE VERIF SET numeroVerif=".$newNum." WHERE numeroVerif=".$numeroBase;
    $resGetMaj= mysql_query($reqGetMaj) or die($reqGetMaj." : ".mysql_error());
    return true;
}

function verifAleatoire()
{
    $reqGetIds = "SELECT numeroVerif FROM VERIF";
    $resGetIds = mysql_query($reqGetIds) or die($reqGetIds." : ".mysql_error());
    $total = mysql_num_rows($resGetIds) -1;
    $TableGetIds = mysql_fetch_array($resGetIds);
    $total = rand(0,$total - 1);
    for ($i=0;$i<$total;$i++)
    {
        $TableGetIds = mysql_fetch_array($resGetIds);
    }
    return $TableGetIds["numeroVerif"];
}


Et mon formulaire (enfin le morceau nteressant):
                    <td style="width:450px;">
                    <?
                        $numeroVerif = verifAleatoire();
                        echo getQuestionVerif($numeroVerif);
                    ?>
                        <br />
                        <input value="" name="reponseVerif" type="text" size="50" />
                        <input value="<?=$numeroVerif;?>" name="numeroVerif" type="hidden" size="78" />
                    </td>

Et enfin la validation :

    if (isset($_POST["numeroVerif"])) $numeroVerif = $_POST["numeroVerif"]; else $numeroVerif="";
    if (isset($_POST["reponseVerif"])) $reponseVerif = $_POST["reponseVerif"]; else $reponseVerif="";

if (!testVerif($numeroVerif,$reponseVerif))
        erreur("Le contr&ocirc;le anti-robot a &eacute;chou&eacute;. Veuillez recommencer");


merci
Seb
vendredi 9 janvier 2009 à 23:54:19 | Re : protection anti-flood

JulSoft

Membre Club
Réponse acceptée !
J'ai lu ton code en crois, je suis peut être passé à coté de quelque chose. Il me semble que si $numeroVerif=="", alors ta fonction getReponseVerif() renvera "", et donc ton robot passe la validation...

Essaie peut être de modifier ta ligne de verification à la fin comme ça:

if (!testVerif($numeroVerif,$reponseVerif)||$numeroVerif==""||$reponseVerif=="")
        erreur("Le contr&ocirc;le anti-robot a &eacute;chou&eacute;. Veuillez recommencer");

Je pense que là ça devrait fonctionner mieu.
samedi 10 janvier 2009 à 01:34:34 | Re : protection anti-flood

kohntark

Membre Club
Réponse acceptée !
NON, mais presque !!! Tu n'étais vraiment pas loin et grâce à toi j'ai trouvé, ça m'a fait tilt
En toute honnêteté j'ai galèré il y a peu pour trouver la faille (j'étais intimement persuadé qu'il y en avait une), mais bon, tu sais comment c'est, quand on a trop la tête dedans on ne voit plus rien.

Une chaîne vide, comme tu l'indiques, génère une erreur, ça ne passe donc pas.
Par contre, une injection sql de '""' et un champ vide dans la réponse et le tour est joué !!
cad :
envoi en POST de l'équivalent de :
<input value='""' name="numeroVerif" type="hidden" size="78" />
et rien dans le champ réponse

Alors :
if (!testVerif($numeroVerif,$reponseVerif) || empty($numeroVerif) || empty($reponseVerif)
=>
if (!testVerif($numeroVerif,$reponseVerif) || empty($numeroVerif) || empty($reponseVerif) || !is_numeric($numeroVerif))

Mais il y a encore pas mal de choses à sécuriser :
   - tes questions qui sont trop simples (cf mes précédents posts)
   - tes variables issues du formulaire qui ne sont pas contrôlées :
    il est facile de faire une injection SQL pour que tous tes numeroVerif aient le même numéro, etc ...
   - les die des requêtes sont très facile à générer et ils renseignent beaucoup trop sur la structure de ta base (c'est bon pour le debug uniquement)
   - ...

Je pense que le principe n'est pas mauvais. Une fois corrigé les remarques tu ne devrait plus avoir d'ennui. Si c'est encore le cas il est possible de complexifier encore, avec l'utilisation des cookies, la mise en place d'un nombre d'essais à la minute, un filtrage des robots connus, ...


Tiens nous informé stp,


Kohntark -

samedi 10 janvier 2009 à 02:03:01 | Re : protection anti-flood

JulSoft

Membre Club
J'en avais un du même genre, où je générais des clés qui étaient détruites lors de la vérification, avec un captcha tout con, mais qui marchait très bien. Si j'arrive à récupérer le code (il était pas pour moi...) je te le passe.
samedi 10 janvier 2009 à 09:10:48 | Re : protection anti-flood

sebrs1

merci à vous je m'en occupe dès que j'ai le temps, pour l'instant pas de flood depuis la dernière fois ....


Cette discussion est classée dans : web, site, anti, flood, protection


Répondre à ce message

Sujets en rapport avec ce message

modif classeur excel sur site web par internautes [ par jmrolland ] J'ai inséré un classeur excel sur mon site web et j'aimerais connaître la manière la plus simple pour que : les modifs effectuées par les internautes Problème URL [ par turlut ] bonjour tout le monde !Enfait mon problème est que j'aimerais bien réalisé un petit programme en php qui me permeterait de taper dans l'url d'un site Problème URL [ par turlut ] bonjour tout le monde !Enfait mon problème est que j'aimerais bien réalisé un petit programme en php qui me permeterait de taper dans l'url d'un site acces ressources web [ par elanspeech ] Bonjour,J'ai mon site internet sur une machine.J'aimerais a partir d'une page de mon site pointer sur un fichier stocke sur une autre machine de mon r Protection page [ par SatanCorporation ] Salut a tous !!!!!sur mon site web je voudrais créé une fonction qui me permettrait de protecger une page de mon site.Je voudrias que le code de la pa Protection page web [ par SatanCorporation ] donc tu vois ce que je veux faire c une protection de page web.je vopudrais que ma page resemble a ca ://file.phpinclude('protect.php');echo "Apres av Cherche personne pour participation à un site web sur php [ par zmania ] Je cherche des personne qui veulent rendre php plus accésible pour les débutant et ainis aux autre en fessant des tutoriels. En effet le site qui en cherche personne pour participé à un site web sur php [ par zmania ] Je cherche des personne qui veulent rendre php plus accésible pour les débutant et ainis aux autre en fessant des tutoriels. En effet le site qui en cherche personne pour participé à un site web sur php [ par zmania ] Je cherche des personne qui veulent rendre php plus accésible pour les débutant et ainis aux autre en fessant des tutoriels. En effet le site qui en foto webcam a partir d'un site web [ par Kevergeek ] voilà chui en train de faire un site de fiche en php :http://www.persoprofil.fr.stpour ajouter les photos des gens j'aimerais que lorsqu'ils clique su


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales