• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Variable übergeben klappt nicht

J

j-l-n

Guest
Folgendes klappt nicht; die zwei Werte Stimme nie über ein:
PHP:
if($_GET['captcha'] == $random_string){

Nun meine Frage: wie übergebe ich die Variable "$random_string" an die formular.php und aktualisiere sie auch, wenn das Captcha neu geladen wird?
Folgendes klappt nicht:
-Übergabe in $_SESSION (es wird immer das vorherige angezeigt)
-Weitergabe in $_POST
-include(), da der String ja immer neu erzeugt wird und man so nicht den gleichen hat
-außerdem wird bei include wegen dem image/png-Header nur das Bild angezeigt
 
Zuletzt bearbeitet:
In einer Session solltest das eigentlich klappen - was hast du denn da probiert?

PS: Zeig' mal ein Bild, das dein Skript erzeugt. Captchas zu erzeugen, die wirklich für Menschen leichter sind als für Maschinen, ist nämlich nicht ganz trivial...
 
In einer Session solltest das eigentlich klappen - was hast du denn da probiert?

Wenn ich in die Captcha.php ein
PHP:
session_start();
$_SESSION['code'] = $random_string;
einfüge und dann im Formular den Inhalt der Session per echo ausgebe, erscheint immer der Code davor. D.h., wenn ich die Seite aktualisierte, dann stimmt der Code mit dem zuletzt angezeigten überein, aber das Captcha ist schon wieder ein anderes.

PS: ich weiß, es ist nicht optimal ;)
test-captcha.jpg
 
Natürlich bekommst du da eine andere Ausgabe. Du gibst doch ein HTML aus und in dem HTML wird gesagt, dass ein <img> mit der Captcha-URL geladen werden soll. Also ist, nachdem der Browser das Bild geladen hat, der Zufallsstring ein anderer.

Mach' doch mal ein Testskript, das nur den Inhalt der $_SESSION ausgibt. Da solltest du sehen, dass es passen sollte.

PS: du musst auf jeden Fall den Code zurücksetzen, wenn das Formular abgeschickt wurde, den sonst hat der Angreifer ja unendlich viele Versuche, wenn er das nicht über einen normalen Browser macht, da ja dann das Captcha-Bild nicht unbedingt geladen werden muss.

PPS: Ich wüsste nicht, was ich da eingeben würde... eventuell "MuF 6qK Gv6"? Aber der Hintergrund ist nicht wirklich ein Sicherheitsgewinn, da er durch einfache Bildbearbeitungsroutinen entfernt werden kann (v.A. wenn er immer gleich ist, wie du im anderen Thread geschrieben hast).
 
Natürlich bekommst du da eine andere Ausgabe. Du gibst doch ein HTML aus und in dem HTML wird gesagt, dass ein <img> mit der Captcha-URL geladen werden soll. Also ist, nachdem der Browser das Bild geladen hat, der Zufallsstring ein anderer.

Mach' doch mal ein Testskript, das nur den Inhalt der $_SESSION ausgibt. Da solltest du sehen, dass es passen sollte.

Ja, dann passt es schon. Aber das an sich nützt mir ja nichts - wie bekomme ich es denn hin, dass eben auch beim eingebundenen Caotcha der gleiche String ausgegeben wird?
 
Julian, kommen für deine Anwendung keine bestehenden Captcha Dienste in Frage? Oder ist das eine Übung?
 
Julian, kommen für deine Anwendung keine bestehenden Captcha Dienste in Frage?

Schon. Aber ich würde dennoch es gerne selbst machen. Jetzt habe ich schon das Captcha an sich gebaut, da fände ich es schön, wenn ich auch das ganze Projekt schaffe :)
 
Warum willst du den Captcha-Code auf der Seite ausgeben? Das ist nicht wirklich sicher und auch nicht nötig.

Du musst das auf dem Server vergleichen, wenn das Formular abgeschickt wurde.
 
Natürlich. Aber wie will ich das vergleichen, wenn sich in der Session immer der falsche Code befindet?
 
Ich mache bei Captchas immer serverseitig eine Zuordnung von Formular zu Captcha mittels Token. Den Token gebe ich als Hidden Feld im Formular wieder zurück zum Server. Und dann schaue ich serverseitig, ob der eingegebene Captcha Wert zu dem Captcha passt, welches vorher per Token zugeordnet wurde. Die Tokens sind Zufallszahlen- und Buchstabenketten.
 
In der Session befindet sich schon der richtige Code... probier's aus.

@mikdoe: ich hoffe, du löschst ein Token sofort, wenn es einmal abgefragt wurde. Sonst hätte der Angreifer auch wieder unendlich viele Versuche.
 
@mikdoe: ich hoffe, du löschst ein Token sofort, wenn es einmal abgefragt wurde. Sonst hätte der Angreifer auch wieder unendlich viele Versuche.
Selbstverständlich. Das Form-Token funktioniert nur genau einmal und wird dann gelöscht. Ohne Form-Token gibt es auch keine Captcha-Zuordnung mehr.
 
Mittlerweile funktioniert es tatsächlich. Und nen zusätzlichen Schutz hab ich auch noch eingebaut:
PHP:
 //Anzahl fehlerhafter Versuche
 $try = $_SESSION['wrong-captcha'];
 if(empty($try)){
   $try = 1;
 }
 $try = $try + 1;

 if($try < 10){
     if($input == $captcha){
     $info = "Eingabe stimmt mit Captcha überein.";
     $try = 0;
   }
   else{
     $info = "FEHLER: Falsche Eingabe!";
   }
 }

 //wenn 10 oder mehr erfolglose Versuche, sperren
 else{
   $ip = $_SERVER['REMOTE_ADDR'];
   $min = 60;
   sperre_ip($ip, $min);
   $meldung = "Zu viele erfolglose Versuche.";
   die($meldung);
 }
 
Du kannst doch nicht eine komplette IP sperren, wenn einer 10 mal sich verschaut hat... es gibt große Rechnerverbunde, die über einen NAT ins Netz gehen und deswegen alle die gleiche (oder nur einige wenige) IP haben.

Und ein Angreifer würde sowieso immer eine neue Session-ID anfordern.
 
Zurück
Oben