Stylemotion.de Forum » Archiv » WEB//NEWS
Tipp: Kommentar-Funktion mit Captcha
Seiten (4): 1 2 3 4 »  
Autor Beitrag
 
Frozenmod
Kunde
Kommentar-Funktion mit Captcha
Guten Abend!

Ich haette ein Anliegen bzw Verbesserungsvorschlag!
Unsere Web//NEWS werden zur Zeit enorm von Bots zugestammt. Teils 1250 Kommentare zu einer News.
Ueber das Backend braucht man agrnicht mehr anfangen zu loeschen, das ist aussichtslos.

Deshalb: Wie waere es mit einer Captcha Funktion fuer die Kommentare?
Das ist im WWW genau auf Grund der vielen Spam-Bots eigentlich schon Standard geworden.

Vielen Dank

Gregor Leinfelder
Frozenmod ist offline  
 
Christian Scheb
Stylemotion.de (Entwickler)
mir ist die problematik mit spambots bekannt, allerdings ist die entwicklung von webnews schon so lange eingestellt, so dass es keine erweiterungen mehr geben wird.
Christian Scheb ist offline  
 
Frozenmod
Kunde
Guten Tag,

schade eigentlich!

Naja ich habe mich nun darum gekuemmert und eines gefunden. Der Einbau ist aeußerst simpel. Ich wuerd anbieten, den Einbau in das Skript (ohne Gewaehr natuerlich) hier in dem Thread in ein paar Worten zu erklaeren. Wenn dies gewuenscht und erlaubt ist, bitte ich um eine kurze Rueckmeldung, andernfalls behalte ich es eben fuer mich ;)

Viele Grueße,
Greor Leinfelder
Frozenmod ist offline  
 
Christian Scheb
Stylemotion.de (Entwickler)
bitte, ich denke da wird es noch ein paar geben, die sich dafür interessieren.
Christian Scheb ist offline  
 
René
Aber ganz schnell mein Lieber ;-)
René ist offline  
 
Tommy
Unregistrierter Benutzer
Ja bitte, ich werde auch zugespamt ohne ende....
Danke!
 
Frozenmod
Kunde
Na, dann will ich mal nicht so sein! ;)

Zuerst ein kleiner Ueberblick was zu machen ist:

a) einen Ordner "captcha" mit entsprechenden Dateien in das Hauptverzeichnis eueres Webspaces hochladen
b) modul_addcom.php editieren
c) commentform.html Template anpassen

Schritt a):

Ihr erstellt im root-Verzeichnis einen Ordner names "captcha"
In diesen Ordner muessen drei Dateien.
- das Hintergrund-Bild (140x40 Pixel) mit dem Namen captcha.PNG
- die captcha.php Datei
- eine Schriftart, die gut lesbar ist (z.B. Arial)

Wo bekommt ihr diese Dateien?
Ganz einfach, das Hintergundbild erstellt ihr selbst mit Paint oae. (Bitte auf die exakte Benennung achten.)

Die captcha.php erstellt ihr selber mit folgendem Inhalt: (einfach in die Datei reinkopieren)
PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
   session_start
();
   unset(
$_SESSION['captcha_spam']);
   
$text rand(1000,10000); //Zufallszahl

   
function encrypt($string$key) {
   
$result '';
   for(
$i=0$i<strlen($string); $i++) {
      
$char substr($string$i1);
      
$keychar substr($key, ($i strlen($key))-11);
      
$char chr(ord($char)+ord($keychar));
      
$result.=$char;
   }
   return 
base64_encode($result);
   }

   
$_SESSION['captcha_spam'] = encrypt($text"8h384ls94"); //Key
   
$_SESSION['captcha_spam'] = str_replace("="""$_SESSION['captcha_spam']);

        
   
header('Content-type: image/png');
   
$img ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
   
$color ImageColorAllocate($img000); //Farbe
   
$ttf $_SERVER['Document_Root']."/arial.ttf"//Schriftart
   
$ttfsize 25//Schriftgrösse
   
$angle rand(0,5);
   
$t_x rand(5,50);
   
$t_y 35;
   
imagettftext($img$ttfsize$angle$t_x$t_y$color$ttf$text);
   
imagepng($img);
   
imagedestroy($img);
?> 


Die Schriftart Arial findet ihr auf der Festplatte im Ordner Windows/Fonts/ und heißt arial.ttf


Schritt b):
Ihr geht in euer Webnews-Verzeichnis in den Ordner parse/ und editiert die Datei modul_addcom.php, in dem ihr den Inhalt durch diesen ersetzt:

PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php ###########################################################
##                                                       ##
##            WEB//NEWS Newsmanagement Script            ##
##                (c) Copyright 2002-2004                ##
##                  by Christian Scheb                   ##
##                                                       ##
###########################################################


//*********************************************************
//****************  CAPTCHA  ÜBERPRÜFEN   *****************
//*********************************************************

<?php
session_start
();
function 
encrypt($string$key) {
$result '';
for(
$i=0$i<strlen($string); $i++) {
   
$char substr($string$i1);
   
$keychar substr($key, ($i strlen($key))-11);
   
$char chr(ord($char)+ord($keychar));
   
$result.=$char;
}
return 
base64_encode($result);
}
$sicherheits_eingabe encrypt($_POST["sicherheitscode"], "8h384ls94");
$sicherheits_eingabe str_replace("="""$sicherheits_eingabe);
if(
$sicherheits_eingabe == $_SESSION['captcha_spam']){
unset(
$_SESSION['captcha_spam']);




//*********************************************************
//****************  KOMMENTAR HINZUFÜGEN  *****************
//*********************************************************

    //Sicherheitsabfrage
    
if ( !is_object($this) ) {
    echo
"FEHLER: Das Script wurde falsch eingebunden! Alle Dateien aus dem Ordner &quot;parse&quot; sind NICHT zum includen bestimmt. Lesen Sie die Readme um WEB//NEWS richtig einzubinden.";
    return;
    }

list(
$lptime)=$this->first("SELECT time FROM ".PRE."_comment WHERE ip='".$_SERVER['REMOTE_ADDR']."' ORDER BY time DESC LIMIT 1");
list(
$blockip)=$this->first("SELECT string FROM ".PRE."_block WHERE ( type='ip' AND string='".$_SERVER['REMOTE_ADDR']."' AND endtime>='".time()."' ) LIMIT 1");
list(
$blockname)=$this->first("SELECT string FROM ".PRE."_block WHERE ( type='name' AND string='".addslashes($_POST['name'])."' AND endtime>='".time()."' ) LIMIT 1");

if ( 
!
$_POST['name']
 || !
$_POST['text']
 || ( 
$this->set['cf1']['useit'] && $this->set['cf1']['required'] && !$_POST['feld1'] )
 || ( 
$this->set['cf2']['useit'] && $this->set['cf2']['required'] && !$_POST['feld2'] )
 || ( 
$this->set['cf3']['useit'] && $this->set['cf3']['required'] && !$_POST['feld3'] )
 || ( 
$this->set['cf4']['useit'] && $this->set['cf4']['required'] && !$_POST['feld4'] )
 || ( 
$this->set['cf5']['useit'] && $this->set['cf5']['required'] && !$_POST['feld5'] )
) echo 
$this->message(0);
elseif ( 
$blockip || $blockname ) echo $this->message(1);
elseif ( (
$lptime+$this->set['spamprot']*60)>time() ) echo $this->message(2,array("%DAUER%"=>(($lptime+$this->set['spamprot']*60)-time())));
elseif ( 
strlen($_POST['text'])>$this->set['maxcomchars'] ) echo $this->message(3,array("%ZEICHEN%"=>strlen($_POST['text']),"%ZEICHEN_MAX%"=>$this->set['maxcomchars']));
elseif ( 
$this->set['noshouting'] && preg_match("/\!\!\!\!|\?\?\?\?/is",$_POST['text']) ) echo $this->message(4);
else {
$this->query("INSERT INTO ".PRE."_comment (newsid,name,feld1,feld2,feld3,feld4,feld5,text,time,ip) VALUES ('".$_REQUEST['id']."','".addslashes($_POST['name'])."','".addslashes($_POST['feld1'])."','".addslashes($_POST['feld2'])."','".addslashes($_POST['feld3'])."','".addslashes($_POST['feld4'])."','".addslashes($_POST['feld5'])."','".addslashes($_POST['text'])."','".time()."','".$_SERVER['REMOTE_ADDR']."')");
    if ( 
$type=="archiv" $presite="arch";
    else 
$presite="news";
$link=$this->set[$presite.'page'].'?id='.$_REQUEST['id'].$this->iif($this->set[$presite.'params'],"&".$this->set[$presite.'params']);

echo 
$this->message(5,array("%LINK%"=>$link)).'<meta http-equiv="refresh" content="4; URL='.$link.'">';
}

}

else
{
echo
"Bitte geben Sie den Sicherheitscode ein!<br><a href=javascript:history.back()>Zurück</a>";  // Hier die Fehlermeldung eingeben, falls kein Captcha eingegeben wurde.
}
?> ?>


Anmerkung: in beiden Scripts findet ihr einen Key "8h384ls94". Diese sollte ihr durch eine eigene, voellig beliebige Zahlen und Buchstaben Kombination ersetzen. Es ist nur wichtig, dass in beiden Dateien der selbe Code steht ;)

Schritt c):
Nun muesst ihr in euer Kommentar-Forumular natuerlich noch das Captcha einbauen. Dies geschieht in der entsprechenden Template-Datei die ihr im Ordner parse/templates/... mit dem Namen commentform.html finden solltet.

Der einzufuegen Code fuer das Bild lautet:
HTML-Code:
1<img src="captcha/captcha.php" border="0" title="Sicherheitscode">


Der Code fuer das Eingabefeld:
HTML-Code:
1<input type="text" name="sicherheitscode" size="4">


Nun alle geaenderten Dateien hochladen und sich hoffentlich ueber eine funktionierende Captcha-Schranke freuen.

Wichtig:
Falls die news.php per include() Befehl in z.B. die index.php eingebunden wird, tritt beim absenden ein Fehler auf wegen "session_start()". Dies ist ein Cookie Problem, welches leicht geloest werden kann.

Oeffnet zuerst die modul_addcom.php im Verzeichnis /parse und ganz am Anfang den Code:
PHP-Code:
1 <?php session_start(); ?>
löschen-

Nun editiert ihr die Datei, in die ihr die news.php einbindet, also z.B. index.php und fuegt ganz, ganz am Anfang (also muss wirklich als allererstes in der Datei stehen):
PHP-Code:
1 <?php <? session_start(); ?> ?>


Nun sollte der Fehler behoben sein!!

Anmerkung: Ihr macht alles auf eigene Gefahr. Ich gebe keine Gewaehr oder komme fuer etwaigen Schaden auf!

Gruß
Gregor Leinfelder

Quelle
Frozenmod ist offline  
 
René
Danke. Ich hab das jetzt mal versucht einzubauen. Ohne erfolg.

Also mein Webnews erreichst du so: root/nms/index.php

Wo soll ich nun den ordner anlegen?
René ist offline  
 
Frozenmod
Kunde
Naja, du musst es immer aus Sicht der index.php sehen.

Ergo muss der Ordner Captcha in

root/nms/

und irgendwie darf ich meinen eigenen beitrag nicht mehr editieren*grml*
Frozenmod ist offline  
 
René
geht das ding bei dir? Gib mal einen Link bitte....
René ist offline  
Seiten (4): 1 2 3 4 »  
 
Suche Optionen
» Erweiterte Suche
Druckansicht Druckansicht