PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : reCaptcha Tutorial



11800
16.12.2011, 15:59
Heyo FH!
Ich habe mir mal den "Aufwand" gemacht und einen kleinen Sample-Code für reCaptcha geschrieben. Diesen werde ich euch nun im Rahmen eines kleinen Tutorials von mir näher erläutern und gerne auch auf Anfrage eine Demo hosten oder euch den Code zuschicken / uploaden / veröffentlichen.
Die reCaptcha Dokumentation beinhaltet eigentlich alles aber eben auf Englisch. Aber nun zum wesentlichen!

Im letzten Codeblock wurden die eckigen Klammern [ und ] durch ersetzt. Ihr müsst das beim nachcoden beachten, selbstverständlich sind [ und ] gemeint! Das liegt an vB denke ich, habe eben probiert das ganze zu fixxen, was aber nicht funktioniert hat.
--------------------------------------------

1.) reCatpcha Keys bekommen
Zunächst einmal müsst ihr den öffentlichen sowie privaten Schlüssel für eure Seite bekommen. Dazu tragt ihr hier (https://www.google.com/recaptcha/admin/create) eure Seiten-URL ein und erstellt eure Keys, diese 2 Keys solltet ihr euch auf jeden Fall abspeichern.
2.) reCaptcha-Bibliothek bekommen
Ladet euch hier (http://code.google.com/p/recaptcha/downloads/detail?name=recaptcha-php-1.11.zip&can=2&q=label%3Aphplib-Latest) die reCaptcha-Bibliothek für PHP herunter. Der aktuelle Stand bei der Verfassung dieses Tutos war Version 1.11
3.) Die Einbindung in PHP


<?php
//In der nächsten Zeile wird die Datei recaptchalib.php in das PHP-Dokument eingebunden - auf Dateiberechtigungen & Namen achten!
require_once('recaptchalib.php');
//Hier wird die Variable 'publickey' mit dem Inhalt des Public Keys den ihr von Schritt 1 her kennen solltet.
$publickey = "Secret :3 ";
//Die eigentliche Ausgabe das Captchas
echo recaptcha_get_html($publickey);
?>
Darum muss nurnoch ein Formular gebaut werden, das bei mir einfach so aussah:


<form action="check_recaptcha.php" method="POST">
<!-- Der reCaptcha PHP-Code -->
<!-- Andere Formularfelder (oder auch nicht) -->
</form>
4.) Das Catpcha überprüfen
Bei mir heisst die folgende Datei check_recaptcha.php. Wichtig ist das die form in Schritt 3 an diese Datei sendet.


<?php
$privatekey = "Noch geheimer";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER+++91;"REMOTE_ADDR"+++93;,
$_POST+++91;;"recaptcha_challenge_field"+++93;,
$_POST+++91;"recaptcha_response_field"+++93;);

if (!$resp->is_valid) {
// Dieser Code wird ausgegeben wenn die Antwort vom reCatpcha-Server negativ ist (daraus folgt: Das Captcha wurde falsch eingegeben)
echo "Du bist aber auch ganz schön blöd, nichma n Captcha schaffste!"
else{
echo "Das hast du toll gemacht!";
}
?>
Ich hoffe ihr wisst nun wie ihr reCatpcha in PHP verwendet - wenn nicht dann tuts mir sehr sehr leid für euch ô.Ô. Aber natürlich könnt ihr mich per PM, oder Mail (11880@Safe-Mail.net) bzw. ICQ (756026) kontaktieren und Fragen stellen. Sollte mein Tutorial fehlerhaft sein an irgendeiner Stelle (habe den Code nicht noch einmal gecheckt) bitte meldet das mir persönlich

Freak1936
14.01.2012, 14:57
Interessanter Beitrag, passt genau zu meinem aktuellem vorhaben.
Ich konnte es biss jetzt nicht nachweisen, aber ich denke mir das das man ein ausgefülltes reCaptcha auch zu einem späterem Zeitpunkt nutzen könnte oder ?

Also nach dem Schema:
1.Man hat ein kleines Äffchen das für einen die Captchas ausfüllt und abschickt.
z.b. hier https://www.google.com/recaptcha/api/noscript?k=6LfuB70SAAAAAEAski1gUUx2lHJG6-KSGQmeNhlL
2. Das Äffchen hat alles richtig gemacht und bekommt seine Belohnung, das würde die Form eines recaptcha_challenge_field einnehmen, etwa so:
recaptcha_challenge_field=03AHJ_VusSQIbRuLjThQdsAm 7g03xUCHfGb02J96qebzKrt2LngLhK9dDJYPiB4aXkCBJADl20 PRDKBaZOhjrLtbUr1NPUYF4Lx2bwcno0DMJR_lwRjELdeaPPNy hacENmI3eTv8ZWG0welKFIdwSe-nLR729wKWO0Fw.
Unser Äffchen hat sich sich gleich gemerkt was es als captcha eingetippt hat, etwa so:
recaptcha_response_field=Tolles+Captcha
4. Jetzt hat man für das ausfüllen der eigentlichen Registration na klar ein Script, welches so die ganzen Daten wie Geburtstag, Geschlecht, E-Mail, ... und so ausfüllt.

Frage:
Könnte man für diese Registrierung auch die Daten des zuvor vom Äffchen ausgefüllten Captchas mitgeben, also das hier:
recaptcha_challenge_field=03AHJ_VusSQIbRuLjThQdsAm 7g03xUCHfGb02J96qebzKrt2LngLhK9dDJYPiB4aXkCBJADl20 PRDKBaZOhjrLtbUr1NPUYF4Lx2bwcno0DMJR_lwRjELdeaPPNy hacENmI3eTv8ZWG0welKFIdwSe-nLR729wKWO0Fw&recaptcha_response_field=Tolles+Captcha
und die Registrierung so erfolgreich abschliessen ?

11800
18.01.2012, 13:08
Ich verstehe die Frage nicht, könntest du das vllt. etwas konkretisieren? Grundsätzlich wird bei jedem Seitenaufruf ja ein neues Captcha generiert. Möchte man die Seite später verwenden und hat meine Möglichkeit sie 'offenzulassen' (cURL zum Beispiel) muss man sich die Cookies speichern um die Session wieder aufzunehmen. Das ist aber nur Theorie, praktische Erfahrung mit cURL habe ich wenig.

Freak1936
21.01.2012, 22:03
Jepp und genau das war eigentlich auch schon meine Frage, kann man von z.b. anderern Personen ausgefüllten reCaptchas auch etwas Zeit versetzt noch benutzen ?

Ich habe mir jetzt einfach selber nochmal was geschrieben um das zu überprüfen.

meinvz_google_recaptcha.php:

//1. Mit Curl das reCaptcha holen und parsen
//2. recaptcha eingeben und mit restlichen recaptcha daten abschicken

$recaptcha_url = 'https://www.google.com/recaptcha/api/noscript?k=6LfuB70SAAAAAEAski1gUUx2lHJG6-KSGQmeNhlL&is_audio=false';

//1. Mit Curl das reCaptcha holen und parsen
//Mit Curl das reCaptcha holen
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($curl, CURLOPT_URL, $recaptcha_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_COOKIEJAR, 'google_cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, 'google_cookie.txt');
$site = curl_exec($curl);
curl_close($curl);
//recaptcha_challenge_field und captcha_bild_url parsen
preg_match('#<form action="" method="POST"><input type="hidden" name="recaptcha_challenge_field" id="recaptcha_challenge_field" value="(.*)">#', $site, $recaptcha_challenge_field);
$recaptcha_bild_url = 'https://www.google.com/recaptcha/api/image?c='.$recaptcha_challenge_field+++91;1+++93;;

//2. recaptcha eingeben und mit restlichen recaptcha daten abschicken
echo'<center>
<form action="google_recaptcha_post.php" method="POST">
<img src="'.$recaptcha_bild_url.'"><br>
<input name="recaptcha_response_field" type="text" autocomplete="off">
<input name="recaptcha_url" type="hidden" value="'.$recaptcha_url.'"><br>
<input name="recaptcha_challenge_field" type="hidden" value="'.$recaptcha_challenge_field+++91;1+++93;.'"><br>
<input name="recaptcha_bild_url" type="hidden" value="'.$recaptcha_bild_url.'"><br>
<a href="?k=6LfuB70SAAAAAEAski1gUUx2lHJG6-KSGQmeNhlL&amp;is_audio=false">Neues Bild</a><br>
<input type="submit" name="submit" value="I+++39;m a human"><br>
</form></center>';

//zusammenfassung
echo'<pre>
<center><h3>Zusammenfassung:</h3></center>
recaptcha_challenge_field = '.$recaptcha_challenge_field+++91;1+++93;.'<br>
recaptcha_challenge_field_key = <br>
recaptcha_response_field = <br>
recaptcha_url = '.$recaptcha_url.'<br>
recaptcha_bild_url = '.$recaptcha_bild_url.'<br></pre>';
?>Der erste Teil holt sich das cap von der entsprechenden Seite, in diesem falle https://www.google.com/recaptcha/api/noscript?k=6LfuB70SAAAAAEAski1gUUx2lHJG6-KSGQmeNhlL&is_audio=false. (Auf diesen Link werden die recaps von MeinVZ geschickt, die von Hotmail sieht z.b. so aus:https://www.google.com/recaptcha/api/noscript?k=6LdTvgsAAAAAALsgavl1LD-lUyj0_kIVQEhoZu21&is_audio=false).
Man gibt das reCaptcha ein und es wird an den 2 Teil des Scriptes geschickt

meinvz_google_recaptcha_post.php

<?php
//1. POST array auslesen und http_querry erstellen
//2. cURL starten und $recaptcha_response_field abschicken und recaptcha_challenge_field_key parsen

//POST array auslesen und http_querry erstellen
//POST array auslesen
$recaptcha_array = array();
$recaptcha_array+++91;'recaptcha_challenge_field'+ ++93; = $_POST+++91;'recaptcha_challenge_field'+++93;;
$recaptcha_array+++91;'recaptcha_response_field'++ +93; = $_POST+++91;'recaptcha_response_field'+++93;;
$recaptcha_array+++91;'submit'+++93; = $_POST+++91;'submit'+++93;;
$recaptcha_url = $_POST+++91;'recaptcha_url'+++93;;
$recaptcha_bild_url = $_POST+++91;'recaptcha_bild_url'+++93;;
//aus $recaptcha_array einen http_querry erstellen
$post_data = http_build_query($recaptcha_array);

//cURL starten und $recaptcha_array in $post_data abschicken
//curl session
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($curl, CURLOPT_URL, $recaptcha_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_COOKIEJAR, 'google_cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, 'google_cookie.txt');
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
$site = curl_exec($curl);
curl_close($curl);
//$recaptcha_challenge_field_key parsen
preg_match('#<textarea rows="5" cols="100">(.*)</textarea>#', $site, $recaptcha_challenge_field_key);

//zusammenfassung
echo '<pre>
<center><h3>Zusammenfassung:</h3></center>
recaptcha_challenge_field = '.$recaptcha_array+++91;'recaptcha_challenge_field '+++93;.'<br>
recaptcha_challenge_field_key = '.$recaptcha_challenge_field_key+++91;1+++93;.'<br>
recaptcha_response_field = '.$recaptcha_array+++91;'recaptcha_response_field' +++93;.'<br>
recaptcha_url = '.$recaptcha_url.'<br>
recaptcha_bild_url = '.$recaptcha_bild_url.'<br>
</pre>';

echo'<center>
<form action="meinvz_register.php" method="POST">
<input name="recaptcha_challenge_field" type="text" value="'.$recaptcha_challenge_field_key+++91;1+++93;.'"><br>
<input name="recaptcha_response_field" type="text" value="'.$recaptcha_array+++91;'recaptcha_response_field' +++93;.'"><br>
<input name="recaptcha_url" type="text" value="'.$recaptcha_url.'"><br>
<input name="recaptcha_bild_url" type="text" value="'.$recaptcha_bild_url.'"><br>
<input type="submit" name="submit" value="Seite 1 anlegen"><br></center>';
?>Wichtig ist, wie auch in dem Tut von 11800 beschrieben, das man 2 keys bekommt. Ich weiss es nicht genau aber ich vermute mal das sind die von Dir angesprochenen public und private keys, welche beide als recaptcha_challenge_field gesendet werden.
Also geht man quasi auf die capseite, beim Aufruf der ersten Seite wird z.b. ein solcher vergeben, der wird zusammen mit dem recaptcha_response_field abgeschickt:

recaptcha_challenge_field=03AHJ_Vuu4MAOKuSXuOtAyFk-fbOjgqMDXc9v-npslj-MmWIk8hiTs9I917333b9UYNldr-LXusVoKeUF553KhTY5EyZV22VadP412p2UNRJb4rRWxL4TRGpp UFuYzw-p2RgBgVQuiieJ498DPZ44QHom2USLQciUd1w&recaptcha_response_field=500+xpleter&submit=I%27m+a+human

Man erhält einen zweiten key zurück, der den alten in recaptcha_challenge_field überschreibt, zum vergleich hier einmal der alte, ich vermute eben das ist der public key:
recaptcha_challenge_field=03AHJ_Vuu4MAOKuSXuOtAyFk-fbOjgqMDXc9v-npslj-MmWIk8hiTs9I917333b9UYNldr-LXusVoKeUF553KhTY5EyZV22VadP412p2UNRJb4rRWxL4TRGpp UFuYzw-p2RgBgVQuiieJ498DPZ44QHom2USLQciUd1w&.
Und hier der neue, den man bekommt wenn das cap gelöst wurde, also wohl der private key:
recaptcha_challenge_field=03AHJ_Vut8X24pAV7yI1f8OW 0uUymhc8IS6UHOd72fiO_Ga6Pw2aXulmWsgDNceIMvJsYJjdyI 1SocKB-PEO6NADO2Kzk4qm4j5Va6zERt7Go8ieFrqNfqBLlJy5-vKdz7pnO0m5xG54By.
Um jetzt z.b. ein "MeinVZ" Registrierung abzuschliessen, muss man also das neue recaptcha_challenge_field und die eingabe in recaptcha_response_field zusammen mit einigen anderen Parametern übergeben und die Registrierung hat geklappt.

Mein Gedanke wäre ja na klar die Caps von dritten ausfüllen zu lassen und mit den ergebnissen a.) z.b. Accounts erstellen un b.) eine Datenbank aufzubauen um evtl. eine OCR Software damit füttern zu können, die das cap knacken kann. Ich weiss nich ob das überhaupt mit der OCR Software gehen würde, aber ich mein gelesen zu haben das die Software nach einigen tausenden manuell eingegebenen recaptchas dazu im stande wäre ...

Darüber "wie-lange" man diese Private Keys noch nutzen könnte, liegen mir leider noch keine Ergebnisse vor, aber das werde ich auch noch mal testen.

sn0w
22.01.2012, 00:22
Zu dem Fremd-Ausfüllen: Es muss gehen ;) Siehe Captcha Trader usw. Dort wird auch das Captcha an wen anderes weitergeleitet und von diesem auch ausgefüllt ;)

Freak1936
22.01.2012, 14:20
Ja "Captcha-Trader" iss mir persönlich ein neuer Begriff, hab den gleich mal gegoogelt und siehe da: Das ist so FAST das Prinzip welches ich meinte.
Ich weiß nicht wie breit da das Anwendungsgebiet gestreut ist, das meiste steht in Verbindung mit dem JDownloader, aber es werden ja auch schon fertige "CaptchaTrader API" angeboten. Mal sehen ob man diese i.w. in ein PHP/Javascript einbauen kann ...

1000 Captchas = 1$, diese kosten wären ja noch recht überschaubar ^^

11800
22.01.2012, 16:05
Captchatrader benutze ich selbst zum Botten bei Browsergames & eben für pyLoad (jDownloader Alternative ohne GUI also perfekt für meinen kleinen Linux-Server)
Ist Super, habe nur durch Refs glaube ~8,5k Credits da. Spitze Seite, kann ich nur empfehlen.