8796 sujets

Développement web côté serveur, CMS

Bonsoir,

J'aimerais sécuriser mon système de commentaires récemment installé...

http://art9libre.tuxfamily.org/bdlibre_commentaires

Pour cela, j'ai téléchargé le logiciel de captcha cryptograph-1.4
Une fois décompressé, j'obtiens un dossier crypt que j'envoie dans le répertoire bdlibres_commentaires (lequel contient un système de commentaires fonctionnel constitué de fichiers php en relation avec la base de données).

Le but est d'insérer le système de captcha dans le formulaire à sécuriser (déjà existant).
(Je pense devoir l'insérer dans le fichier Formulaire.php)

REMARQUE : cryptograph fonctionne sans base de données.

Dans le formulaire a sécuriser, il faut insérer ce bout de code :

$cryptinstall="./crypt/cryptographp.fct.php";
 include $cryptinstall;


Pour afficher le captcha dans le formulaire, il suffit de demander :
dsp_crypt(0,1);


Le captcha doit s’afficher, il faut maintenant le traiter lors de l’envoi du formulaire. C’est la fonction chk_crypt qui s’en occupe :
 if (chk_crypt($_POST['code']))
     echo "Bravo";
     else echo "Erreur";


Voici le contenu modifié par la tentative d'insertion du captcha, à savoir le fichier Formulaire.php

<?php
$cryptinstall="./crypt/cryptographp.fct.php";
 include $cryptinstall; 
dsp_crypt(0,1); 
if (chk_crypt($_POST['code']))
     echo "Bravo";
     else echo "Erreur";
/**
 * Cet objet sert a créer un formulaire composé d'un textarea pour saisir le texte
 * et de quatre input qui sont, un de type text, et deux hidden ainsi qu'un bouton envoyer.
 * il envoie les données en post vers la page de traitement passé en parametre
 * du constructeur. Il retourne le formulaire via la methode getFormulaire
 *
 * @author Dariumis
 */
class Formulaire {
     /**
     * Stock le formulaire sous la forme d'une chaine de caracteres
     * @var <String>
     */
    private $formulaire;
    /**
     * A la construction cet objet construit le formulaire et le stocke
     * dans la variable de class $formulaire de type String.
     * @param <String> $urlTraitement
     *     chemin vers la page de traitement
     * @param <String> $urlRetour
     *     chemin vers la page de redirection aprés le traitement
     * @param <String> $tableSql
     *     table SQL sur laquelle effectuer l'insertion
     */
    public function  __construct($urlTraitement,$urlRetour,$tableSql) {
	//on initialise $formulaire a vide dans un souci de lisibilité
        $this->formulaire="";
        //on concatène le formulaire
        $this->formulaire.="<form action=\"$urlTraitement\" method=\"post\">\r\n";
        //on concatène le texte "votre pseudo"
        $this->formulaire.="    <span>votre pseudo:</span><br/>\r\n";
        //on concatène le champs pour renseigner le pseudo
        $this->formulaire.="    <input class=\"pseudo\" type=\"text\" value=\"\" name=\"pseudo\"><br/>\r\n";
        //on concatène le texte "votre texte"
        $this->formulaire.="    <span>votre texte:</span><br/>\r\n";
        //on concatène le champs pour renseigner le texte
        $this->formulaire.="    <textarea name=\"txt\"></textarea>\r\n";
        //on concatène le champs caché pour transferer la variable
        // contenant l'url de retour.
        $this->formulaire.="    <input type=\"hidden\" value=\"$urlRetour\" name=\"urlRetour\">\r\n";
        //on concatène le champs caché pour transferer la variable
        // contenant la table SQL sur laquelle faire l'insertion.
        $this->formulaire.="    <input type=\"hidden\" value=\"$tableSql\" name=\"tableSql\"><br/>\r\n";
        //le bouton "poster"
        $this->formulaire.="    <input type=\"submit\" value=\"poster\">\r\n";
        //on ferme le formulaire
        $this->formulaire.="</form>\r\n";
    }    
    /**
     * cette methode public retourne le formulaire
     *
     * @return <String>
     *     le formulaire.
     */
    public function getFormulaire() {
        return $this->formulaire;
    }
}
?>


En allant sur la page web concernée, on voit effectivement l'erreur...

http://art9libre.tuxfamily.org/bdlibre_commentaires

Comment adapter le code aux pages ? C'est la question que je me pose, n'ayant que peu de connaissances en php et en cryptographie Smiley ohwell

Merci d'avance si quelqu'un pouvait m'éclairer Smiley lol upload/22767-Capture.png
Modifié par ElDreamMachine (24 Mar 2011 - 13:30)
Bonjour Sylvain

Merci pour l'attention que tu as portée à mon message Smiley smile

Voici donc le contenu de mon cryptographp.fct.php

A+

<?php



// -----------------------------------------------

// Cryptographp v1.4

// (c) 2006-2007 Sylvain BRISON 

//

//  www.cryptographp.com  

// cryptographp@alphpa.com 

//

// Licence CeCILL modifiée

// => Voir fichier Licence_CeCILL_V2-fr.txt)

// -----------------------------------------------



 if(session_id() == "") session_start();

 

 $_SESSION['cryptdir']= dirname($cryptinstall);

 

 

 function dsp_crypt($cfg=0,$reload=1) {

 // Affiche le cryptogramme

 echo "<table><tr><td><img id='cryptogram' src='".$_SESSION['cryptdir']."/cryptographp.php?cfg=".$cfg."&".SID."'></td>";

 if ($reload) echo "<td><a title='".($reload==1?'':$reload)."' style=\"cursor:pointer\" onclick=\"javascript:document.images.cryptogram.src='".$_SESSION['cryptdir']."/cryptographp.php?cfg=".$cfg."&".SID."&'+Math.round(Math.random(0)*1000)+1\"><img src=\"".$_SESSION['cryptdir']."/images/reload.png\"></a></td>";

 echo "</tr></table>";

 }





 function chk_crypt($code) {

 // Vérifie si le code est correct

 include ($_SESSION['configfile']);

 $code = addslashes ($code);

 $code = str_replace(' ','',$code);  // supprime les espaces saisis par erreur.

 $code = ($difuplow?$code:strtoupper($code));

 switch (strtoupper($cryptsecure)) {    

        case "MD5"  : $code = md5($code); break;

        case "SHA1" : $code = sha1($code); break;

        }

 if ($_SESSION['cryptcode'] and ($_SESSION['cryptcode'] == $code))

    {

    unset($_SESSION['cryptreload']);

    if ($cryptoneuse) unset($_SESSION['cryptcode']);    

    return true;

    }

    else {

         $_SESSION['cryptreload']= true;

         return false;

         }

 }



?>


Smiley rolleyes
Modifié par ElDreamMachine (07 Mar 2011 - 13:32)
Une fois de plus, merci à Dariumis l'auteur du système de commentaire http://dariumis.webhop.biz/forum/page/afficheSujet.php?clefSujet=7
qui m'a carrément fourni la solution (enfin presque Smiley smile à mon problème !
Il faut dire qu'il a été motivé par cette question de captcha.
Pour ceux qui seraient intéressés :

Dans un premier temps il faut afficher l'affichage des images (captcha) et le bouton recharger, pour recharger la captcha. Alors il faut donc dézipper cryptographp-1.4 dans le dossier "bdlibre_commentaire", puis en haut du fichier index.php inclure le fichier qui doit posséder la fonction
dsp_crypt(0,1);
qui permet d'afficher le captcha, l'inclure donc avec un include en haut du fichier index.php:

<?php
//*****************************
//*********** ICI *************
include "crypt/cryptographp.fct.php";
//*********************************
//*********************************
include 'Class/Formulaire.php';
include 'Class/BaseSql.php';
include 'Class/Affichage.php';
if(isset ($_GET['alert']))
    $alert="<div style=\"color:red\">".htmlspecialchars($_GET['alert'])."</div>";
else
    $alert="";
?>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="css/formulaire.css"/>
        <link rel="stylesheet" type="text/css" href="css/affichage.css"/>
        <meta http-equiv="content-type" content="text/html; charset?=ISO-8859-1" />
        <meta http-equiv="content-language" content="fr-FR" />
        <meta name="language" content="fr-FR" />
        <title>
            Commentaires
        </title>
    </head>
    <body >
        <?php
        echo str_replace("&lt;br/&gt;", "<br/>", $alert);
        $form=new Formulaire("traitement.php", "index.php", "lesCommentaires");
        echo '<div id="leFormulaire">';
        echo $form->getFormulaire();
        echo '</div>';
        $base=new BaseSql();
        $query=$base->executeQuery("select * from lesCommentaires order by DateSujet desc");
        $affichage=new Affichage($query);
        $base->closeQuery();
        echo "<div id=\"lesCommentaires\">";
        echo $affichage->getAffichage();
        echo "</div>";
        ?>
    </body>
</html>


Puis en suite faut afficher le captcha, donc l'afficher entre les balses html <form></form>, le formulaire HTML est contenu dans le fichier Formulaire.php, le formulaire html est stocké dans une variable php sous forme de chaine de caractères (du texte), c'est la variable qui ce nomme $formulaire, dans le fichier Formulaire.php:
 $this->formulaire.="    <textarea name=\"txt\"></textarea>";


Par conséquent le formulaire affiché sur la page (<form></form>) doit etre contenu dans la variable $formulaire il faut concaténer (ajouter) du contenu dans cette variable, grâce au point avant le égal dans le code ci-dessus ajouter du contenu dans la variable $formulaire, s'il y avait juste le égale on écraserait son contenu.

Donc la fonction qui retourne le système de captcha se nomme dsp_crypt(0,1);, elle retourne (contient) le système de captcha, il faut donc l'ajouter dans $formulaire donc à la ligne 13 de Formulaire.php j'ajoute le résultat de la fonction.

Formulaire.php

<?php
class Formulaire {
    private $formulaire;
    public function  __construct($urlTraitement,$urlRetour,$tableSql) {
        $this->formulaire="";
        $this->formulaire.="<form action=\"$urlTraitement\" method=\"post\">";
        $this->formulaire.="    <span>votre pseudo:</span><br/>";
        $this->formulaire.="    <input class=\"pseudo\" type=\"text\" value=\"\" name=\"pseudo\"><br/>";
        $this->formulaire.="    <span>votre texte:</span><br/>";
        $this->formulaire.="    <textarea name=\"txt\"></textarea>";
        //--------------------------------------
        //-------------- ICI ------------------
        $this->formulaire.=dsp_crypt(0,1);
        //--------------------------------------
        //-------------- ------------------
        $this->formulaire.="    <input type=\"hidden\" value=\"$urlRetour\" name=\"urlRetour\">";
        $this->formulaire.="    <input type=\"hidden\" value=\"$tableSql\" name=\"tableSql\"><br/>";
        $this->formulaire.="    <input type=\"submit\" value=\"poster\">";
        $this->formulaire.="</form>";
    }
    public function getFormulaire() {
        return $this->formulaire;
    }
}
?>


Donc là il est placé juste après le textarea qui semblait un bon endroit, seulement après ça on s'aperçoit que les éléments sont en position absolute, donc en haut à gauche, et qu'aucune image n'est présente, le système pour recharger l'image a l'air de fonctionner. C'est peut être a moi de créer les images, peut-être que les images ne sont pas présentes.

http://art9libre.tuxfamily.org/bdlibre_commentaires

Je ne peux donc pas vraiment mettre [Résolu], peut-être dans le prochain post Smiley murf
Problème résolu grâce à Dariumis Sur son site vous pouvez suivre la procédure pas à pas. C'est vraiment pédagogique, chaque étape est décrite en détail pour pouvoir créer soi-même son système de commentaire avec un captcha intégré. Si vous êtes fainéant, vous n'aurez qu'à télécharger le .zip et l'adapter à votre config (connexion à la base de données). Chez moi, ça marche nickel. Encore merci à lui et à vous qui avez lu ce post Smiley smile

Mode d'emploi et téléchargement de MyPhpCom.zip : http://dariumis.webhop.biz/forum/page/afficheSujet.php?clefSujet=1300387267_496

Exemples perso : la page des commentaires - http://art9libre.tuxfamily.org/MyPhpCom/index.php
Le code intégré dans une page .php - http://art9libre.tuxfamily.org/synopsis.php
Modifié par ElDreamMachine (24 Mar 2011 - 13:42)
Et les aveugles, comment ils font? Smiley cligne

Les captchas c'est pas terribles, c'est mieux d'utiliser des services comme akismet, etc. Smiley smile
Les aveugles utilisent généralement un captcha audio.
Mon site est consacré à la bande dessinée.
Un captcha a beau ne pas être terrible, moi je m'en contenterai.
Je rappelle que les posts ci-dessus donnent des liens pour écrire un tel programme en php. (C'est donc pédagogique).
askimet ou je ne sais quoi, je connais pas.
Les captchas audio ne marchent pas non plus très bien, il paraît. Smiley cligne

J'utilise akismet sur mon site, ça fonctionne bien, jamais de spam. Smiley smile

Mais tu fais comme tu veux…
Modifié par Patidou (24 Mar 2011 - 16:06)
Modérateur
Tu n'es pas le seul. Je ne l'avais pas vu du premier coup d'oeil non plus, et je suis sûr que c'est le cas pour bien d'autres personnes aussi.