kann man Spam bei den Kommentaren unterbinden ?

Begonnen von hobbyknipser, 16. April 2007, 10:16:28

Vorheriges Thema - Nächstes Thema

zarzal

vielen lieben Dank für diese Anleitung. Ich habs drin und das scheint zu klappen. Allerdings musste ich eine Änderung machen:
msgbox(PGBLmsg_comment_saved); und danach die Klammer .... die war bei mir zuviel, musste ich weglassen. Ich verwende 2.12 aus dem CSV.
Ansonsten bin ich jetzt erst mal glücklich.  /uploads/emoticons/icon_e_wink.gif.c059000ae48ff64afa53be0962c021f2.gif\" alt=\":wink:\" />
Verbesserung wär dann noch, wenn man auf die Language Strings für das Captcha zurückgreift, aber das geht auch so, bei mir schreiben eh nur Deutsche. Zumindest ist so dem Bot der Saft abgedreht.  :H:

zarzal

Ich nochmal ... Die Abfrage ist drin, lässt sich aber offenbar umgehen /uploads/emoticons/icon_e_sad.gif.cc8ba2b6b966c5e020020efa47702aab.gif\" alt=\":(\" /> wieder Spam drin!
Very good site. Thanksshttp://www.blablablaspam.htm cheap soma
[/quote]
Das war es also noch nicht ganz. Noch eine Idee?

k00ni

Hallo,
kann es grad nicht testen, aber scheint so als prüft der zwar den Code, aber legt den Kommentar trotzdem an. Ich denke, das könnte an der Klammer liegen.
Mein Testkommentar wurde nicht angelegt; werden die da von dir freigeschaltet?
 
Grüße

zarzal

ja, hab ich auch gemerkt. Bei meinem Test kommt die Meldung das der Code fehlt, aber ich krieg trotzdem die Mail mit dem Kommentar.  Kommentare sind nicht moderiert und müssen auch nciht freigeschaltet werden. Ich sehr mir mal die Klammersache an. Mal sehen, was da nicht stimmt.

zarzal

so, mal sehen was nun passiert. Ich habe mir den Code aus der pgbeintrag.php geholt und deine Ideen damit ausgebaut.
Im Detail sind das die beiden Blöcke:
 

  // Captcha-Code abfragen 
 if ( $pgb_checkcap == 1) {
   if ( ($ccode == \"\" ) or ($ccode != $_SESSION[\'pcaptchacode\']) ) {
msgbox(PGBLmsg_captcha_error);
require(\"fuss.php\");
exit();
}
 }

 
und


 
         :
            \" align=\"right\">
 
 

k00ni

So richtig, weiß ich jetzt nicht, was du damit genau verändert hast. Scheint so, als hast du eine Einstellung, wo du setzt, ob du Captcha verwenden möchtest oder nicht.
Nur das Problem mit der Klammer ist folgendes (Vermutung): Das Kommentar wird nur eingetragen, wenn der Sicherheitscode richtig ist! Ansonsten wird nur die Meldung ausgegeben, das er fehlerhaft ist. Bei dir wird aber beides ausgegeben. Das der Captcha-Code falsch ist und das das Kommentar angelegt wurde. Deshalb gehe ich von einer falsch gesetzten Klammer aus.
 
Grüße

zarzal

nein, wenn ich deine Klammeranweisung oben so einbaue wie du schreibst, gibts nen Scripterror. Da lässt sich das kommentarscript gar nicht aufrufen. Ich verwende pgb 2.12 aus dem aktuellen csv ! Da hat sich einiges am Code getan. Ich habe mir nun angesehen, was du einbaust und habe die entsprechenchenden stelen im pgbeintrag.php gesucht und gefunden. Der Code ist ja an vielen stellen identisch. So habe ich diese beiden Blöcke gefunden.
Zumindest wird jetzt bei falschem Code keine email mehr erzeugt und offenbar auch nichts eingetragen. Soweit so gut gut, ich teste das weiter und halte ein Auge drauf. Zumindest gibt es kein Scriptfehler. Meinen kompletten code hier zu posten ist ja nicht erwünscht, oder ?

k00ni

Poste den mal bitte hier, von der Datei. Aber bitte in den [ code ] - Tag setzen, sonst zerlegts die Seite  /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" />

zarzal

kommentar.php V2.12 aktuelles CSV mit Modifikationen für Captcha


TemplateVar(\"tpl_mail\"));
   mail($spalte[\'email\'],PGBL_comment,$tpl_mail,\"From: $gbname \\nContent-Type:text/html\");
 }
msgbox(PGBLmsg_comment_saved);
}
//echo \"\";
//echo \"Kommentare zum Eintrag\";
//Eintrag anzeigen
echo \"
       $gbname \".PGBL_entry.\"
     \".PGBL_autor.\"
     \".PGBL_entry.\"
     \";
//Var für TPL vorbereiten
$gbt_autor = formatstring($spalte[0]);
if ($spalte[\'vip\'] == 1) {
$gbt_vip = \"-- \".PGBL_vipentry.\" --\";
}
$gbt_time  = date(PGBLformat_datetime,$spalte[6]+$time_offset);
if ( $spalte[1] != \"\" and $spalte[\'showemail\'] == 1 ) {
$gbt_mail  = \"\";
}
    if ($spalte[2]) {
      $gbt_homepage = \"\";
   }
   if (intval($spalte[\'icq\']) > 0) {
      $gbt_icq = \"\";
   }
if ($spalte[\'icon\'] == \"\") {
$gbt_icon = \"\";
}
else {
$gbt_icon = \"\";
}
$gbt_titel = formatstring($spalte[\'titel\']);
   if ($spalte[\'host\']) {
       $gbt_host = \"\";
   }
$gbt_message = formatpost($spalte[\'message\']);
 
//TPL parsen und ausgeben
eval($TGBRow->TemplateVar(\"tpl_gbrow\"));
echo $tpl_gbrow;
echo \"\";
//############ Kommentare ######################################################
echo\"
    \".PGBL_comments.\":\";
$sqlbefehl= \"Select * FROM $tab_kom where gbid=\'$id\' order by time DESC\";
$ergebnis  = mysql_query($sqlbefehl, $serverid);
while ( $kom = mysql_fetch_array ($ergebnis)) {
  echo \"\";
//Autor:
  echo \"\";
  echo formatstring($kom[\'author\']);
  echo \"\";
  echo date(PGBLformat_datetime,$kom[\'time\']+$time_offset);
  echo \"\";
//Kommentar:
  echo \"\";
  echo formatpost($kom[\'text\']);
  echo \"\";
/*Delete:
  echo \"\";
  echo \"\";
  echo \"\";
*/
}
echo \"\";
?>
 
\">
 
 
   :
   \" size=\"40\" maxlength=\"25\">
 
   :
 
 
   :
   :
 
 
 
 
 
         :
            \" align=\"right\">
 
 
 
     \">
 
 
 
$pgb_copyright\";
require(\"fuss.php\");
?>

k00ni

Schaut gut aus. Kommentare gehen auch, wenn man den richtigen Code eingegeben hat. Baust du noch das Zwischenspeichern des Autorennamens und des Kommentartextes mit ein? So wie ich das oben beschrieben habe. Damit muss man bei einer unwillentlichen Fehleingabe nicht wieder alles neuschreiben.
Zudem würde ich dazu noch aus dem hier
 

// Captcha-Code abfragen  
 if ( $pgb_checkcap == 1) {
   if ( ($ccode == \"\" ) or ($ccode != $_SESSION[\'pcaptchacode\']) ) {
   msgbox(PGBLmsg_captcha_error);
   require(\"fuss.php\");
   exit();
   }
 }
 $sqlbefehl  =  \"INSERT INTO $tab_kom VALUES (\'\',\'$zeit\',\'$id\',\'$text\',\'$author\')\";
 if (!$ergebnis  = mysql_query($sqlbefehl, $serverid))
 echo mysql_error($serverid);

 
 
das hier machen
 

// Captcha-Code abfragen  
if ( $ccode != $_SESSION[\'pcaptchacode\'] AND $pgb_checkcap == 1 )  
{
msgbox(PGBLmsg_captcha_error);
}
else
{  
 $sqlbefehl  =  \"INSERT INTO $tab_kom VALUES (\'\',\'$zeit\',\'$id\',\'$text\',\'$author\')\";
 if (!$ergebnis  = mysql_query($sqlbefehl, $serverid))
 echo mysql_error($serverid);
}

 
 
Das bewirkt, dass sobald der Code ungleich dem generierten ist (das ist er auch, wenn das Feld leer ist /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" /> ) und wenn er noch die Variable $pgb_checkcap auf 1 hat, dann soll eine Meldung kommen. Es wird aber weiterhin das Gästebuch komplett angezeigt. Somit umgehst du halt bei einer Fehleingabe das die Leute mühsam zurück müssen, um alles neu einzugeben. (ist ungetestet)
[edit]Habe dir mal ein Testkommentar angelegt. \"Bitte löschen\" mal bitte löschen /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />[/edit]
Grüße

zarzal

Deine Änderung bewirkt aber das bei falschem oder fehlenden Code wieder die Email erzeugt wird. Bei meiner Modifikation ist das nicht der Fall.
Die andere Änderung mit dem speicher des Autors und des Bodys habe ich absichtlich wieder rausgenommen. Ich vermute hier die Lücke zur Umgehung des Ganzen Systems. Ich mach jetzt erst mal deinen Vorschlag wieder rückgängig.

k00ni

Das mit der Email habe ich nicht beachtet. Packe einfach diesen Text in den else-Zweig, wo auch das Kommentar angelegt wird. Die Email-Anweisung wird nämlich getrennt behandelt.
Also das
 

else 
{    
 $sqlbefehl  =  \"INSERT INTO $tab_kom VALUES (\'\',\'$zeit\',\'$id\',\'$text\',\'$author\')\";  
 if (!$ergebnis  = mysql_query($sqlbefehl, $serverid))  
 echo mysql_error($serverid);
}

 
 
zu dem
 

else 
{    
 $sqlbefehl  =  \"INSERT INTO $tab_kom VALUES (\'\',\'$zeit\',\'$id\',\'$text\',\'$author\')\";  
 if (!$ergebnis  = mysql_query($sqlbefehl, $serverid))  
 echo mysql_error($serverid);
//Kommentar via Mail an den Autor
 if ($notify == \"1\" and $spalte[\'email\']!=\'\') {  
   // Format : mail(\"empfaenger\",\"betreff\",\"nachricht\",\"sonstige mailheader\");
   $TMail = new Template($pgblangdir.\"/comment.\".$pgb_language.\".mail\");
   eval($TMail->TemplateVar(\"tpl_mail\"));
   mail($spalte[\'email\'],PGBL_comment,$tpl_mail,\"From: $gbname \\nContent-Type:text/html\");
 }
   msgbox(PGBLmsg_comment_saved);
}

zarzal

ich mag dich eigentlich nicht enttäuschen aber das geht auch nicht.. Die Mail kommt noch immer.

k00ni

Dann muss ich passen. Eigentlich müsste es funktionieren, aber scheint es nicht. Tut mir leid.

zarzal

ich verwende jetzt erst mal meine Modifikation wie geposted und warte ab, was passiert. Wenn eine Woche lang kein Spam kommt hab ich einen Teilsieg.

all your base are belong to us / Discord