Auteur Sujet: Script "Ajout de sites" avec codage  (Lu 8838 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne frédéric jouan

  • Habitué
  • **
  • Messages: 202
Script "Ajout de sites" avec codage
« le: 01 juin 2006 à 16:32:42 »
Bonjour,
Sur un site ancien (1998) le spam rend fou !
Serait-il compliqué de modifier un script existant pour y intégrer un petit script de reconnaissance visuelle (en utilisant la bibliothèque adéquate gd2) ?

À propos du script :
Ce module permet aux professionnels du tourisme de proposer leur site. Il stocke d'abord les données dans une table wait_liens pour activation ou non.
Malgré cette technique, il faut chaque matin effacer de la base de données plusieurs centaines de spams !
je joins mon script au cas où une âme charitable...


<?

include("include/config.php");
include("include/fonctions.php");

// Ajout d'un site
$reussi = 0;
$errmsg = "";
if ($poster == 1 && !empty($titre) && !empty($description) && !empty($url)) {
// Table
$sql_table = "wait_liens";
if ($auto_liens == 1) {
$sql_table = "liens";}
// Verification de la presence du lien
$q1 = mysql_query("SELECT COUNT(*) AS num FROM liens WHERE url LIKE '$url'");
$r1 = mysql_fetch_array($q1);
$q2 = mysql_query("SELECT COUNT(*) AS num FROM wait_liens WHERE url LIKE '$url'");
$r2 = mysql_fetch_array($q2);
if ($r1["num"] > 0) {
$errmsg = "Ce lien est déjà présent dans les liens.<br>\n";}
if ($r2["num"] > 0) {
$errmsg = "Ce lien est dans la file d'attente des liens.<br>\n";}
// Ajout si pas d'erreurs
if (strlen($errmsg) == 0) {
$scat == 1 ? $sql_cat = $newcat : $sql_cat = $cat;
mysql_query("INSERT INTO ".$sql_table." (titre, url, description, cat, date, hits) VALUES('".AuAddSlashes($titre)."', '".strtolower(AuAddSlashes($url))."', '".AuAddSlashes($description)."', '".AuAddSlashes($sql_cat)."', NOW(), 0)");
$reussi = 1;}
}

include("include/hpage.php");

// Ajout reussi
if ($reussi == 1) {
// Titre
tTbl("Ajout réussi", "left");
echo "<p>Le lien sera ajouté, un administrateur doit le vérifier.<br><font color=\"red\">ATTENTION : pas de SPAM !</font><br>\nCliquez <a href=\"liens.php\">ici</a> pour voir la liste de liens.</p>\n";
}

// Formulaire d'ajout de liens
else {
// Titre
tTbl("Ajout d'un site", "left");
// Formulaire de categorie
function formCat() {
global $cat;
$q = mysql_query("SELECT cat FROM liens GROUP BY cat ORDER BY cat ASC");
echo "\n\n<select name=\"cat\" class=\"itexte\">\n";
while ($r = mysql_fetch_array($q)) {
if (AuStripSlashes($cat) == $r["cat"]) {
echo "<option value=\"".htmlentities($r["cat"])."\" selected>".htmlentities($r["cat"])."</option>\n";}
else {
echo "<option value=\"".htmlentities($r["cat"])."\">".htmlentities($r["cat"])."</option>\n";}
}
echo "</select>\n\n";
}

?>

<p>Ajoutez un site dans l'annuaire. Votre descriptif doit être clair, ce doit être un résumé de ce que propose le site. Si aucune des catégories présentes ne convient à votre site, vous pouvez toujours en créer une nouvelle.<br>
<br><font color="red">ATTENTION : pas de SPAM ! Les sites sont vérifiés avant leur mise en ligne</font>
Pour modifier un lien, contactez un <a href="admins-contribs.php">admnistrateur</a>.</p>

<script language="JavaScript" src="form.js"></script>

<? if(strlen($errmsg) > 0) {echo "<p align=\"center\"><b>Erreur :</b><br>\n".$errmsg."</p>\n";} ?>

<form action="liens-ajouter.php" method="POST" name="form1" onSubmit="verifLien(); return false;">
<input type="hidden" name="poster" value="1">
<table cellspacing="0" cellpadding="5" border="0" align="center">
<tr><td valign="top"><p><b>Titre du site :</b></p></td><td><input type="text" name="titre" size="35" maxlength="255" class="itexte" value="<? echo stripSlashes($titre);?>"></td></tr>
<tr><td valign="top"><p><b>Adresse du site (URL) :</b></p></td><td><input type="text" name="url" size="35" maxlength="255" class="itexte" value="<? echo stripSlashes($url);?>"></td></tr>
<tr><td valign="top"><p><b>Description :</b></p></td><td><textarea cols="30" rows="5" name="description"><? echo stripSlashes($description);?></textarea></td></tr>
<tr><td valign="top"><p><b>Catégorie :</b></p></td><td><input type="radio" name="scat" value="0" <? if (empty($scat)) {echo "checked";} ?>>&nbsp;<? formCat(); ?></td></tr>
<tr><td valign="top"><p><b>Nouvelle catégorie :</b></p></td><td><input type="radio" name="scat" value="1"<? if ($scat == 1) {echo "checked";} ?>>&nbsp;<input type="text" name="newcat" size="30" maxlength="255" class="itexte" value="<? if ($scat == 1) {echo stripSlashes($newcat);} ?>"></td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="Ajouter le site" class="ibouton" align="center"></td></tr>
</table>
</form>
<?
}
include("include/bpage.php");
?>

Fred
« Modifié: 19 juin 2006 à 16:03:56 par frédéric jouan »

Hors ligne frédéric jouan

  • Habitué
  • **
  • Messages: 202
Re : Script "Ajout de sites" spammé
« Réponse #1 le: 06 juin 2006 à 11:26:29 »
Personne pour m'aider ?


Hors ligne frédéric jouan

  • Habitué
  • **
  • Messages: 202
Re : Script "Ajout de sites" spammé
« Réponse #3 le: 06 juin 2006 à 19:32:28 »
Merci. Je connais pas le php. J'ai copié coller le code du script à la fin du formulaire, juste avant le bpage.php.
Ça répond (entre autres) :
Citer
Warning: Cannot modify header information - headers already sent by (output started at /home/fredjouan/cpnca.org/www/htdocs/themes/fred_cpnac_vert/hpage.php:89) in /home/fredjouan/cpnca.org/www/htdocs/liens-ajouter.php on line 102
Qui correspond à la première ligne de ton code soit :
Citer
header ("Content-type: image/png");

Hors ligne Ice

  • VIP
  • *****
  • Messages: 2 403
    • ATFX
Re : Script "Ajout de sites" spammé
« Réponse #4 le: 06 juin 2006 à 20:16:12 »
A mon avis, ce n'est pas dans ton formulaire qu'il faut mettre le code (surtout quand je lis header ("Content-type: image/png"); ) :)
Tu dois surement insérer le code dans un fichier image.php et faire qqchose comme un <img src="image.php"> dans ton formulaire

Hors ligne frédéric jouan

  • Habitué
  • **
  • Messages: 202
Re : Script "Ajout de sites" spammé
« Réponse #5 le: 07 juin 2006 à 11:55:38 »
OK, ça marche. Merci Atapi. J'ai donc maintenant un code généré aléatoirement et affiché sous forme graphique.
Reste maintenant à ajouter une ligne dans le formulaire :
<form action="liens-ajouter.php" method="POST" name="form1" onSubmit="verifLien(); return false;">
<input type="hidden" name="poster" value="1">
<table cellspacing="0" cellpadding="5" border="0" align="center">
<tr><td valign="top"><p><b>Titre du site :</b></p></td><td><input type="text" name="titre" size="35" maxlength="255" class="itexte" value="<? echo stripSlashes($titre);?>"></td></tr>
<tr><td valign="top"><p><b>Adresse du site (URL) :</b></p></td><td><input type="text" name="url" size="35" maxlength="255" class="itexte" value="<? echo stripSlashes($url);?>"></td></tr>
<tr><td valign="top"><p><b>Description :</b></p></td><td><textarea cols="30" rows="5" name="description"><? echo stripSlashes($description);?></textarea></td></tr>
<tr><td valign="top"><p><b>Catégorie :</b></p></td><td><input type="radio" name="scat" value="0" <? if (empty($scat)) {echo "checked";} ?>>&nbsp;<? formCat(); ?></td></tr>
<tr><td valign="top"><p><b>Nouvelle catégorie :</b></p></td><td><input type="radio" name="scat" value="1"<? if ($scat == 1) {echo "checked";} ?>>&nbsp;<input type="text" name="newcat" size="30" maxlength="255" class="itexte" value="<? if ($scat == 1) {echo stripSlashes($newcat);} ?>"></td></tr>

<tr><td valign="top"><img src="image.php"></td><td>Recopiez ce code  pour valider votre envoi <br><input type="text" name="code" size="8" maxlength="8"></td></tr>

<tr><td colspan="2" align="center"><input type="submit" value="Ajouter le site" class="ibouton" align="center"></td></tr>
</table>
</form>
J'ai simplement ajouté la ligne :
<tr><td valign="top"><img src="image.php"></td><td>Recopiez ce code  pour valider votre envoi <br><input type="text" name="code" size="8" maxlength="8"></td></tr>
Essai
Ensuite je sais pas faire la comparaison des codes. Il faut récupérer la valeur de la variable $pass (du fichier image.php) ?
« Modifié: 07 juin 2006 à 12:02:48 par frédéric jouan »

Hors ligne frédéric jouan

  • Habitué
  • **
  • Messages: 202
Re : Script "Ajout de sites" spammé
« Réponse #6 le: 09 juin 2006 à 15:48:48 »
Pardon, le fichier était protégé. J'ai enlevé la protection
Essai
Et à chaque rafraîchissement, le code change. Parfait.
J'ai donc créé une entrée de formulaire avant l'ajout du site
Il faut maintenant comparer la variable d'image.php avec le code entré...

Hors ligne atapi

  • Connaisseur
  • ***
  • Messages: 306
Re : Script "Ajout de sites" spammé
« Réponse #7 le: 09 juin 2006 à 19:19:31 »
Tu es parvenu a le faire, sinon, ajoute un

session_start();

dans image.php

et

a la fin tu mets

$_SESSION['pass_verification'] = $pass;

Puis sur la page de vérification, idem

session_start();

et tu vérifie avec un

if($_SESSION['pass_verification'] == $_POST['le_nom_du_champ']) {
//ok
}


/!\ attention de ne pas faire un appel de image.php avant la vérification, sinon, c'est foutu

Autrement, j'ai mis un exemple complet ici (Recharge le pack)
http://www.comscripts.com/scripts/php.code-de-securite.2014.html
« Modifié: 09 juin 2006 à 19:47:52 par atapi »

Hors ligne frédéric jouan

  • Habitué
  • **
  • Messages: 202
Re : Script "Ajout de sites" spammé
« Réponse #8 le: 10 juin 2006 à 11:35:35 »
OK, comme ça, même moi j'arrive à comprendre ;-)


Pour le fichier image.php c'est bon.


Sur le script du formulaire, j'ai un horrible :
Citer
Parse error: syntax error, unexpected T_ELSE in /home/fredjouan/cpnca.org/www/htdocs/liens-ajouter.php on line 105


sur le code suivant (fin du script, juste avant le formulaire) :
<? if(strlen($errmsg) > 0) {echo "<p align=\"center\"><b>Erreur :</b><br>\n".$errmsg."</p>\n";}
if( !isset($_POST['code']) ) {
?>


<form action="liens-ajouter.php" method="POST" name="form1" onSubmit="verifLien(); return false;">
<input type="hidden" name="poster" value="1">
<table cellspacing="0" cellpadding="5" border="0" align="center">
<tr><td valign="top"><p><b>Titre du site :</b></p></td><td><input type="text" name="titre" size="35" maxlength="255" class="itexte" value="<? echo stripSlashes($titre);?>"></td></tr>
<tr><td valign="top"><p><b>Adresse du site (URL) :</b></p></td><td><input type="text" name="url" size="35" maxlength="255" class="itexte" value="<? echo stripSlashes($url);?>"></td></tr>
<tr><td valign="top"><p><b>Description :</b></p></td><td><textarea cols="30" rows="5" name="description"><? echo stripSlashes($description);?></textarea></td></tr>
<tr><td valign="top"><p><b>Catégorie :</b></p></td><td><input type="radio" name="scat" value="0" <? if (empty($scat)) {echo "checked";} ?>>&nbsp;<? formCat(); ?></td></tr>
<tr><td valign="top"><p><b>Nouvelle catégorie :</b></p></td><td><input type="radio" name="scat" value="1"<? if ($scat == 1) {echo "checked";} ?>>&nbsp;<input type="text" name="newcat" size="30" maxlength="255" class="itexte" value="<? if ($scat == 1) {echo stripSlashes($newcat);} ?>"></td></tr>

<tr><td valign="top"><img src="image.php"></td><td>Recopiez ce code  pour valider votre envoi <br><input type="text" name="code" size="8" maxlength="8"></td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="Ajouter le site" class="ibouton" align="center"></td></tr>
</table>
</form>


<?
}
}
else {

// On va la vérifier avec celle générée par l'image (image.php)
if( $_POST['code'] == $_SESSION['pass_verification'] ) {

echo '<p>ok, pas de prob, le code est bon</p>';
// Action autorisée par la validation du code

}

// Ici, on va afficher ce qu'on veut pour indiquer que ca n'a pas été
else echo '<p>Désolé, le code n\'est pas bon, retournez sur la page précédente.</p>';

}
include("include/bpage.php");


?>

Hors ligne Ice

  • VIP
  • *****
  • Messages: 2 403
    • ATFX
Re : Script "Ajout de sites" spammé
« Réponse #9 le: 10 juin 2006 à 11:39:53 »
et en enlevant une des deux accolades fermantes avt le else ?

Hors ligne atapi

  • Connaisseur
  • ***
  • Messages: 306
Re : Script "Ajout de sites" spammé
« Réponse #10 le: 10 juin 2006 à 11:43:53 »
Oui, ca doit etre ça, autrement, modifie quand même ton script pour pouvoir l'utiliser si le code est correct
« Modifié: 10 juin 2006 à 11:45:45 par atapi »

Hors ligne diaoul

  • Expert
  • ****
  • Messages: 663
    • http://diaoul.net
Re : Script "Ajout de sites" spammé
« Réponse #11 le: 10 juin 2006 à 14:07:46 »
si je peux me permettre:
else {
$code=strtolower($_POST['code']);
// On va la vérifier avec celle générée par l'image (image.php)
if( $code == $_SESSION['enregistrement_du_code'] )
Cela evitera les fausses erreurs... :mellow:
« Modifié: 10 juin 2006 à 14:36:01 par diaoul »

Hors ligne atapi

  • Connaisseur
  • ***
  • Messages: 306
Re : Script "Ajout de sites" spammé
« Réponse #12 le: 10 juin 2006 à 15:01:58 »
Oui, en effet, il vaut mieu que je le mette dans le pack, surtout que les lettres en images sont capitales

merci

Hors ligne frédéric jouan

  • Habitué
  • **
  • Messages: 202
Re : Script "Ajout de sites" spammé
« Réponse #13 le: 10 juin 2006 à 15:17:12 »
J'aurais dû le mettre tout à l'heure. En enlevant une accolade ça donne :
Citer
Parse error: syntax error, unexpected $end in /home/fredjouan/cpnca.org/www/htdocs/liens-ajouter.php on line 122

De plus elle existait déjà, je n'ai fait qu'ajouter la deuxième pour fermer l'accolade ouverte par if( !isset($_POST['code']) ) {

Bon mais finalement, je la laisse où je l'enlève ?

J'ai également ajouté la ligne préconisée par Diaoul et merci
$code=strtolower($_POST['code']);
Je suppose qu'il s'agit de forcer le codage en majuscules

Hors ligne atapi

  • Connaisseur
  • ***
  • Messages: 306
Re : Script "Ajout de sites" spammé
« Réponse #14 le: 10 juin 2006 à 15:21:09 »
Tu te rends bien compte que ton else n'a rien a foutre la, il faudrait voir tout ton code pour bien faire. mais il est probable alors que l'accolade fermante doivent se trouver tout a la fin