Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „Captcha Code einbauen ??“

Ammersee

Laborant

Grüß euch alle,

habe schon vor kurzem das Thema mit der Kommentar funktion gehabt, dass klappt jetzt auch schon ganz gut, nur wollte ich jetzt mich noch von diesen wiederlichen Spambotts verabschieden und das geht ja nur mit einem Captcha code.
Hier einmal die Seite wo ich die Kommentar funktion eingebaut habe.
ammerseekind.de
Könntet ihr mir da ein bissl behilflich sein habe schon viele Tutorials gelesen und gegooglet aber ich schaffs nicht ihn einzubauen. Hier ist mal mein script um das ganze in die datenbank zu schreiben da muss ja dann auch der captcha code mit rein.
PHP:
<?php
$mysql = mysql_connect('localhost', 'benutzer', 'passwort') or die(mysql_error());
mysql_select_db('datenbankname', $mysql) or die(mysql_error());

if(!$_POST['name']){
  die('Du musst noch deinen Namen eingeben!');
}

if(!$_POST['ort']){
  die('Du musst noch deinen Ort eingeben!');
}

if(!$_POST['email']){
  die('Deine Email-adresse fehlt!');
}

if(!$_POST['text']){
  die('Du musst noch einen Kommentar zur Seite abgeben!');
}

$_POST['name'] = htmlspecialchars($_POST['name']);
$_POST['email'] = htmlspecialchars($_POST['email']);
$_POST['email'] = htmlspecialchars($_POST['email']);

//id kannst du weglassen wenn du diese in der datenbank mit auto_increment eigenständig erstellen lässt
$sql = "INSERT INTO `comment` (`name`, `email`, `text`, `ip`, `ort`) VALUES ('".$_POST['name']."', '".$_POST['email']."', '".$_POST['text']."', '".$_SERVER['REMOTE_ADDR']."', '".$_POST['ort']."')";
mysql_query($sql, $mysql);
header('index.php');
echo 'Danke f&uuml;r deinen Eintrag!<br /><a href="index.php">Zu den Komentaren</a>';
?>
Könntet ihr mir eine kleine Hilfestellung geben.

Grüße Andi
 

blackout

Schaf im Wolfspelz

AW: Captcha Code einbauen ??

nur wollte ich jetzt mich noch von diesen wiederlichen Spambotts verabschieden und das geht ja nur mit einem Captcha code
Nein, es gibt noch (mehrere) andere Möglichkeiten, die gleichzeitig auch benutzerfreundlicher sind.
Die Effektivste: Benutzer brauchen mehrere Sekunden, um ein Formular auszufüllen -- ein Spambot nichtmal eine. Meine Version davon ist es immer ein verstecktes Formularfeld zu erstellen (type="hidden"), dessen Wert auf den aktuellen Timestamp gesetzt wird. Beim Absenden (bzw. Auswerten) kann man dann einfach die Zeitdifferenz errechnen, die der Benutzer vor dem Formular gesessen hat; ist sie zu klein wird der Eintrag verworfen. Bei einem Kommentarsystem kann man auch für Schnelltipper von mindestens 3 Sekunden ausgehen.
Problem dabei ist natürlich momentan, dass der Spambot einfach einen falschen Wert für dieses versteckte Formularfeld mitschicken kann und so eine längere Bearbeitungszeit vortäuscht. Dem kannst du mit einem Hashwert entgegenwirken, der Algorithmus muss dem Spammer natürlich unbekannt sein. Hab mal eben nen Beispielcode zusammengeschustert:
PHP:
<?php
// Note: microtime(true) is available as of PHP 5.0.0. A PHP 4 hack for it can be found here: http://de3.php.net/manual/en/function.microtime.php#75148

// CONFIG
$MinimumFormTime = 2; // Time in seconds that is at least required to complete the form
function customHash($String) { // Custom hash function; the spammer (i.e. the world) must not know it for obvious reasons :)
	return hash('whirlpool', 'flkjhklsjdfh'.$String.'sdjl'); // Salted whirlpool hash function -- change the lsdfjlsj to anything else, e.g. "23r08ufaosjdlaj2". ;)
}
// END CONFIG

if(isset($_POST['timestamp'], $_POST['timestampHash'])) { // Check whether the form has been sent correctly at all; you might want to check whether a name or mail address has been given as well
	if(customHash($_POST['timestamp']) != $_POST['timestampHash']) { // Verify integrity of the timestamp
		echo '<p>Timestamp faked</p>'."\n";
	} else if($_POST['timestamp'] + $MinimumFormTime > microtime(true)) {
		echo '<p>GTFO spambot</p>'."\n";
	} else { // Else carry on ("normal script"). This is where you should start checking the eMail address etc.
		echo '<p>Fine, you&rsquo;re human :)</p>'."\n"; // If everything's fine :)
	}
} else {
	echo '<p>No POST given</p>'."\n";
}

// Generate the form
echo
	'<form method="post" action="'.htmlspecialchars($_SERVER['PHP_SELF']).'">'."\n".
	'	<fieldset>'."\n".
	'		<input type="hidden" name="timestamp" value="'.($CurrentTime = microtime(true)).'"/>'."\n". // Write the microtime to $CurrentTime just in case the microtime changes between these lines (which is *very* unlikely though)
	'		<input type="hidden" name="timestampHash" value="'.htmlspecialchars(customHash($CurrentTime)).'"/>'."\n".
	'		<input type="submit"/>'."\n".
	'	</fieldset>'."\n".
	'</form>'
;
?>
Das Script ist an sich so alleine lauffähig (zumindest der PHP-Teil, das HTML ist eher unvollständig).
 

TomDD

Noch nicht viel geschrieben

AW: Captcha Code einbauen ??

blackout, deine variante hört sich gut an.
wo müsste man den code denn einbauen,wenn man schon ein php-formmailer hat?
 

blackout

Schaf im Wolfspelz

AW: Captcha Code einbauen ??

Ich habe quasi keine Erfahrung mit Fremdskripten, dementsprechend weiß ich weder ob die Frage beantwortbar ist, noch was die Antwort eventuell wäre. Wenn ich mich an ein vorgefertigtes Forum wage, dann hack ich immer so lang drin rum, bis es das macht, was ich will; der Code ist danach aber eher Spaghettiförmig. Deswegen schreib ich eigentlich immer alles selbst (bis auf Bibliotheken, versteht sich).
Insofern: Ich könnte dir da oben direkt ne Mailfunktion reinschreiben, aber um das Script irgnedwo anders einzubauen bräuchte man dessen Code.

Mal abgesehen davon, wie man das realisiert: der Post von mir stammt aus dem April, mittlerweile hab ich schon die ein- oder andere Quelle gelesen, die die Spambot-Ausfüllzeiten gemessen haben. Sie kamen dabei nicht auf Sekunden sondern Stunden (!), dagegen ist die Methode oben natürlich machtlos. Klar, man könnte leicht auch eine Maximalzeit für das Formular einbauen, aber wenn ein Benutzer echt lange an nem Brief schreibt, ihn nicht speichert, und dann ein "GTFO Spambot" vor den Latz gehaun bekommt ...
Der Spamschutz oben stammt eigentlich gar nicht aus einem CAPTCHA-Ersatz-Projekt, sondern einem Anmeldescript von mir; hier ging es darum, serverseitig pro Sekunde nur einen Login-Versuch zuzulassen (adé BruteForce), weil mir Cookies etc. zu unsicher waren. In dem Zusammenhang funktioniert's auch tadellos :)

Sonstiges zum Thema CAPCHA barrierefrei (und bequem für den Benutzer) gibt's z.B. hier in einem super Artikel von 1ngo.
 

CIX88

Aktives Mitglied

AW: Captcha Code einbauen ??

Ja eine ähnliche Methode die blackout beschrieben hat, benutze ich schon eine ganze weile und ist durchaus eine Überlegung wert.

Ansonsten basiert Captcha auf das setzen von SESSION.
Dazu muss SESSION aber aktiviert (session_start) sein :)
 

blackout

Schaf im Wolfspelz

AW: Captcha Code einbauen ??

"Ist durchaus eine Überlegung wert" - hast du das zufällig beobachtet wie sich das mit dem Spam entwickelt hat? Ich hab das nämlich nie getan, und weiß daher auch nicht wirklich wie gut es funktioniert. Hätte ich mal machen sollen :s
 

CIX88

Aktives Mitglied

AW: Captcha Code einbauen ??

Naja, also irgendwelche autoamtische Zugriffe (Scripte) hab ich nie wieder gehabt.
Natürlich, wenn jemand kommt und per Hand sich die Mühe macht und Spam schreibt, dann hilft diese Methode auch nicht. Aber sonst bin ich zufrieden und der User muss keine kryptischen Zahlen oder Buchstaben eintippen.
 

progfrog

programming & 3d

AW: Captcha Code einbauen ??

Ich habe auch mal von dieser Methode gelesen um Spambots abzuwehren. Und würde behaupten, dass sie soweit ganz gut funktioniert, kann allerdings auch sein, dass die Spambotler schon längst dahinter gekommen sind ;)

Man kann den Eingabefeldern einfach Sehr, abstrakte Namen geben, bsp. "0ha/h38&$jd" oder eben was einem so einfällt. Dann macht man noch einige Eingabefelder die ganz schön wie der Spambot es sucht "Name" "Email" oder "Homepage" heißen, diese versteckt man allerdings per CSS, sodass der User sie nicht ausfüllen kann. Der Bot aber rallt das nicht und füllt fleißig alle Felder aus. Nun muss man im Skript nurnoch gucken, ob die Fakefelder ausgefüllt wurden oder nicht, und kann somit den Bot entlarven. Ich weiß nur eben nicht ob ein Bot bei einem Feld so tief in CSS etc. hereinschaut, als dass er herausfände ob das Feld überhaupt sichtbar auf der Seite auftaucht, aber wenn du sagst, dass die sogar hidden Timestampfelder ausfüllen, ist ja davon auszugehen, dass sie es nicht rallen.

Gruß progfrog
 

CIX88

Aktives Mitglied

AW: Captcha Code einbauen ??

Also ich persönlich benutze einen eigenen Algorithmus der nicht auf MD5 & Co basiert.
Zum Beispiel:
Code:
value="fiF+Ln4uQV9fQUenPS4uQTlffl9+"
Was sich dahinter verbirgt weis nur ich :)
Zudem wird mit SESSION gearbeitet, was das Spamen mit autoamtischen Scripten oder auch mit Spam-Software etwas schwerer macht.

Diverse Versuche mit 0-8-15 Tiemstamp-Geschichten haben aber auch gezeigt, dass einige Spamer das auch rausgefunden haben!
 
S

SuperSepp

Guest

AW: Captcha Code einbauen ??

Code:
[FONT=Verdana, Arial, Helvetica, sans-serif][SIZE=2][COLOR=#000000][COLOR=#0000bb]<?php             [/COLOR][COLOR=#ff8000]/*
            example of usage:
            
            inside your form
            <input type="text" name="validator" id="validator"             size="4" />
            <img src="random.php" alt="CAPTCHA image"             width="60" height="20" vspace="1"             align="top" />
            
            and test the value of the "validator" form field like:
            if (!empty($_POST['validator']) && $_POST['validator'] == $_SESSION['rand_code'])             {
                process your form here
                at least destroy the session
                unset($_SESSION['rand_code']);
            */
            
            // save this code in your random script
            [/COLOR][COLOR=#0000bb]session_start[/COLOR][COLOR=#007700]();
            
            if (empty([/COLOR][COLOR=#0000bb]$_SESSION[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'rand_code'[/COLOR][COLOR=#007700]]))             {
                [/COLOR][COLOR=#0000bb]$str [/COLOR][COLOR=#007700]=             [/COLOR][COLOR=#dd0000]""[/COLOR][COLOR=#007700];
                [/COLOR][COLOR=#0000bb]$length [/COLOR][COLOR=#007700]=             [/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700];
                for ([/COLOR][COLOR=#0000bb]$i [/COLOR][COLOR=#007700]=             [/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000bb]$i             [/COLOR][COLOR=#007700]< [/COLOR][COLOR=#0000bb]4[/COLOR][COLOR=#007700];             [/COLOR][COLOR=#0000bb]$i[/COLOR][COLOR=#007700]++) {
                    [/COLOR][COLOR=#ff8000]//             this numbers refer to numbers of the ascii table (small-caps)
                    [/COLOR][COLOR=#0000bb]$str             [/COLOR][COLOR=#007700].= [/COLOR][COLOR=#0000bb]chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]rand[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]97[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]122[/COLOR][COLOR=#007700]));
                }
                [/COLOR][COLOR=#0000bb]$_SESSION[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'rand_code'[/COLOR][COLOR=#007700]]             = [/COLOR][COLOR=#0000bb]$str[/COLOR][COLOR=#007700];
            }
            
            [/COLOR][COLOR=#0000bb]$imgX [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]60[/COLOR][COLOR=#007700];
            [/COLOR][COLOR=#0000bb]$imgY [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]20[/COLOR][COLOR=#007700];
            [/COLOR][COLOR=#0000bb]$image [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]imagecreatetruecolor[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]60[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]20[/COLOR][COLOR=#007700]);
            
            [/COLOR][COLOR=#0000bb]$backgr_col [/COLOR][COLOR=#007700]=             [/COLOR][COLOR=#0000bb]imagecolorallocate[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$image[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]238[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]239[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]239[/COLOR][COLOR=#007700]);
            [/COLOR][COLOR=#0000bb]$border_col [/COLOR][COLOR=#007700]=             [/COLOR][COLOR=#0000bb]imagecolorallocate[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$image[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]208[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]208[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]208[/COLOR][COLOR=#007700]);
            [/COLOR][COLOR=#0000bb]$text_col [/COLOR][COLOR=#007700]=             [/COLOR][COLOR=#0000bb]imagecolorallocate[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$image[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]46[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]60[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]31[/COLOR][COLOR=#007700]);
            
            [/COLOR][COLOR=#0000bb]imagefilledrectangle[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$image[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]60[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]20[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]$backgr_col[/COLOR][COLOR=#007700]);
            [/COLOR][COLOR=#0000bb]imagerectangle[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$image[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]59[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]19[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]$border_col[/COLOR][COLOR=#007700]);
            
            [/COLOR][COLOR=#0000bb]$font [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#dd0000]"VeraSe.ttf"[/COLOR][COLOR=#007700];[/COLOR][COLOR=#ff8000]
            [/COLOR][COLOR=#0000bb]$font_size [/COLOR][COLOR=#007700]=             [/COLOR][COLOR=#0000bb]10[/COLOR][COLOR=#007700];
            [/COLOR][COLOR=#0000bb]$angle [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700];
            [/COLOR][COLOR=#0000bb]$box [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]imagettfbbox[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$font_size[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]$angle[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]$font[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]$_SESSION[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'rand_code'[/COLOR][COLOR=#007700]]);
            [/COLOR][COLOR=#0000bb]$x [/COLOR][COLOR=#007700]= (int)([/COLOR][COLOR=#0000bb]$imgX             [/COLOR][COLOR=#007700]- [/COLOR][COLOR=#0000bb]$box[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000bb]4[/COLOR][COLOR=#007700]])             / [/COLOR][COLOR=#0000bb]2[/COLOR][COLOR=#007700];
            [/COLOR][COLOR=#0000bb]$y [/COLOR][COLOR=#007700]= (int)([/COLOR][COLOR=#0000bb]$imgY             [/COLOR][COLOR=#007700]- [/COLOR][COLOR=#0000bb]$box[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000bb]5[/COLOR][COLOR=#007700]])             / [/COLOR][COLOR=#0000bb]2[/COLOR][COLOR=#007700];
            [/COLOR][COLOR=#0000bb]imagettftext[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$image[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]$font_size[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]$angle[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]$x[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]$y[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]$text_col[/COLOR][COLOR=#007700],             [/COLOR][COLOR=#0000bb]$font[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]$_SESSION[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'rand_code'[/COLOR][COLOR=#007700]]);
            
            [/COLOR][COLOR=#0000bb]header[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"Content-type:             image/png"[/COLOR][COLOR=#007700]);
            [/COLOR][COLOR=#0000bb]imagepng[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$image[/COLOR][COLOR=#007700]);
            [/COLOR][COLOR=#0000bb]imagedestroy [/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$image[/COLOR][COLOR=#007700]);
            [/COLOR][COLOR=#0000bb]?>[/COLOR][/COLOR][/SIZE][/FONT]
 
S

SuperSepp

Guest

AW: Captcha Code einbauen ??

nein eigentlich nicht, aber wenn er ein captcha einbauen will, weiß er auch worum es sich handelt.
für diejenigen die es wissen wollen, das ist ein ausschnitt auf nem tutorial für ein captcha zu erstellen
 

Top_Gun

Aktives Mitglied

AW: Captcha Code einbauen ??

Nun ich hätte jetzt nicht vermutet, dass das was mit dem Threadtitel zu tun hat... :rolleyes:

Finde es aber in keinsterweise Hilfreich einfach nur nen Code hinzuklatschen. Mal abgesehen von dem blinden Vertrauen oder die gefestigten PHP-Kentnisse die du damit vorraussetzt...

Im übrigen ist das hier eine Kommunikationsplattform
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
175.155
Beiträge
2.581.856
Mitglieder
67.222
Neuestes Mitglied
Gregor
Oben