php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.11.2006, 09:25  
Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 45
PHP-Kenntnisse:
Fortgeschritten
aktionkuba
Standard Gästebuch -> Spam verhindern?

Hallo,

ich habe erfolglos versuch mein Gästebuch mit einen kleinen Captcha-Script gegen Spambots zu sichern. Ich beschreibe mal, wie ich das gemacht habe, vielleicht ist ja ein gravierender Fehler drin.

Ich habe eine Tabelle captcha mit 2 Spalten

Code:
----------------------------------------
input | hash
----------------------------------------
12f5  | 43895743958792jewkfjsdhkfj
1452  | sjlkj34kjff9dsfdfkfdjslfkjsd
...
In die Tabelle habe ich 100 zufällig generierte Einträge gemacht. Einmal mit 4 Zeichen, das andere mal mit 32 Zeichen.

Ich generiere nun über einen random-Hash im Formular ein Bild, in dem der zugehörige input dargestellt wird. Übergeben tu ich im Formular den Hash und das was der User in das Sicherheitscodefeld eingibt

Vor dem Gästebucheintrag speichern überprüfe ich anhand des mitgeschickten Hashes ob das $_POST['sicherheitscode'] == $input ist.
Wenn nicht, wird der GB-Eintrag nicht gemacht.

Hier der Link zum Beispiel:
http://www.ground-zeroo.de/guestbook...ion=new&page=0

Also ich bekomme im Schnitt trotz der Codeabfrage ca 10 Spameinträge am Tag.

Hat jemand eine Idee?
Vielen Dank im Vorraus,
Stephan
aktionkuba ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.11.2006, 09:31  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Halllo,
eigentlich brauchst du das nicht über eine Datenbank lösen, du kannst den zufällig erzeugten String im Bild auch in der Session speichern und das Bild eben dynamisch generieren lassen.
Es darf natürlich nichts auf die Lösung hinweisen, also auch nicht der Dateiname des Bildes.

Ohne Script ist das jetzt schwer zu sagen und 10 Spam-Einträge könnten auch von einem Menschen kommen.
Eventuell musst du dir überlegen, Gästebuch-Einträge erst freizugeben, wenn sie eine Administrator gelesen hat.
Zergling-new ist offline  
Alt 17.11.2006, 09:57  
Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 45
PHP-Kenntnisse:
Fortgeschritten
aktionkuba
Standard

Hier ist der Code für das dynamisch generierte Bild:

PHP-Code:

<?php

include("db.inc.php");

$sql "SELECT input FROM captcha WHERE hash='".$_GET['hash']."'";
$result mysql_query($sql);


$input mysql_result($result,0,0);

mysql_close();


header('Content-type: image/png');
$img ImageCreateFromPNG('captcha.png'); //Backgroundimage
$color ImageColorAllocate($img000); //Farbe
$ttf "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$input);
imagepng($img);
imagedestroy($img);


?>
Und hier, wie ich die Abfrage beim versendeten Formular mache:

PHP-Code:
<?php

include("db.inc.php");

$sql "SELECT input FROM captcha WHERE hash='".$_POST['hash']."'";
$result mysql_query($sql);

$input mysql_result($result,0,0);

mysql_close();

if(
$_POST['sicherheitscode'] != $input){
   
$error 2;
}


if (
$error == 0){
   
# Gästebucheintrag machen
}
Ich hoffe das ist ausführlich genug
aktionkuba ist offline  
Alt 17.11.2006, 10:09  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

nimm dir doch ein fertiges Captcha ??? o.O

http://de.wikipedia.org/wiki/Captcha

Wikipedia hat auch gute Beispiele parrat ...
Captchas können auch LIVE erstellt und brauchen nicht via DB erzeugt werden.

Ich meine 100 Einträge .. *hm* sind doch schnell mal zusammenkopiert
M3g4Star ist offline  
Alt 17.11.2006, 10:16  
CIX88
Gast
 
Beiträge: n/a
Standard

Ich habe mir das eigentlich vom Backe gemacht, solche Sachen mit $_POST, GET oder REQUEST zu behandeln.

Für Captcha benutze ich nur noch SESSION.
Dort wird der Code erzeugt, und später wieder abgefragt.
Also ohne jegliche Query zu einer DB.

PS:
http://www.ground-zeroo.de/guestbook_control.php
Irgendwie das Resultat auf die oben genanten Dinge
 
Alt 17.11.2006, 11:18  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

In deinem Beispiel benötigt ein Spammer lediglich eine gültige Kombination aus Hash und Eingabecode und kann so problemlos bei jedem Request diese beiden Werte mitschicken und dein Captcha umgehen.
xabbuh ist offline  
Alt 17.11.2006, 12:21  
Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 45
PHP-Kenntnisse:
Fortgeschritten
aktionkuba
Standard

Hallo,

erstmal vielen Dank für die Antworten! Das mit der DB ist ja eigentlich nur eine Nebensache. Daß 100 Einträge evtl zuwenig sein könnten, leuchtet mir ein.

Mich würde interessieren, woher ein Spammer eine gültige Kombination aus Hash und Eingabecode bekommt? Das kann ich nicht nachvollziehen.

CIX88, was meinst Du mit Deinem PS?

M3g4Star, welches Captcha würdest Du empfehlen?


Gruß,
Stephan
aktionkuba ist offline  
Alt 17.11.2006, 12:35  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Naja man nimmt einmal eine gültigen Input und den Hash dazu! Und jedes mal wenn du nen Eintrag machen willst übergibst du halt diesen Input und Hash! Es wird ja nicht geprüft ob wirklich der Input und Hash von dem Formular genommen wird, es kann ja irgend eine Kombination genommen werden.

Wenn dann musst du wirklich den Hash über ne Session übergeben ...

Außerdem ist dein Script für SQL Injection anfällig!
Flor1an ist offline  
Alt 17.11.2006, 13:22  
Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 45
PHP-Kenntnisse:
Fortgeschritten
aktionkuba
Standard

Hallo Razor,

danke für die SQL Injeciton Info! Ich schau mir jetzt mal die Beispiele auf der Wikipediaseite an.

Steph
aktionkuba ist offline  
Alt 17.11.2006, 13:50  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

mysql_real_escape_string($_POST['hash']) sollte eigentilch reichen gegen die SQL Injection.

Mit dem Hash solltest du zum einen nicht mehr feste Werte nehmen die in der DB stehen sondern zufällig die dann über die Session weitergegeben werden, so brauchst du keine Datenbank und du kannst davon ausgehen das jedes mal ein neuer String gebildet wird.
Flor1an ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bilderklau verhindern wind-kun PHP Tipps 2008 13 11.07.2008 13:29
Frage zu spam bots und captcha litterauspirna PHP Tipps 2008 6 20.05.2008 23:56
Ausführung von PHP-Scripten verhindern Pimbolie1979 PHP Tipps 2008 16 18.05.2008 20:45
Trotz Captcha spam Peter Lustig PHP Tipps 2007 20 28.01.2007 20:35
__set() verhindern das erzeugen einer neuen Variablen shocky PHP Tipps 2006 18 30.10.2006 14:35
Gästebuch spam verhindern Thunderstorm PHP Tipps 2006 11 11.07.2006 17:33
[Erledigt] Gezielt Spam verhindern (Phentermine/Online Casino/...) PHP-Fortgeschrittene 9 19.01.2006 23:08
Zeilenumbruch in Tabelle verhindern patr1k HTML, Usability und Barrierefreiheit 3 22.12.2005 11:24
Externes Downloaden verhindern, aber streaming erlauben... Server, Hosting und Workstations 1 27.11.2005 11:39
mehrfaches absenden von Formular verhindern nieselfriem PHP Tipps 2005-2 1 24.08.2005 13:50
Formular Eingabe verhindern Sachse PHP Tipps 2004 7 23.10.2004 19:35
[Erledigt] SPAM: Was dagegen tun? Off-Topic Diskussionen 10 23.10.2004 17:18
Ein Kommentar System vor Spam schützen? Paulo PHP Tipps 2004 20 20.10.2004 23:00
Spam filter PHP-Fortgeschrittene 7 06.09.2004 16:50
ICQ Spam Report nachträglich einreichen Off-Topic Diskussionen 1 03.07.2004 23:14

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
spam vermeiden gästebuch php, gästebuch spam verhindern link

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.