Wäre es möglich ein einfaches Captcha ohne Cookies/Session umzusetzen?
Mal angenommen man würde sich ein geheimes langes Kennwort ausdenken dass nur im Quelltext der PHP-Datei steht.
Jetzt generiert man noch die Captcha-Aufgabe und verknüpft das Ergebnis mit seinem geheimen Kennwort.
Aus dem String der jetzt aus dem Ergebnis der aus dem Ergebnis der Captcha-Aufgabe und unserem geheimen Passwort bestheht, erzeugt man einen sha512-Hashwert.
Diesen Hash schreibt man in ein hiddenfeld das man zusammen mit Eingabefeld für das Captcha über trägt.
Da nur ich mein geheimes langes Kennwort kenne, sollte auch nur ich über prüfen können ob der übergebene Captcha-Wert plus mein geheimes langes Kennwort den selben Hashwert ergeben wie der in dem Hidden-Feld.
Würde das funktionieren oder befinde ich mich "auf einem Holzweg"?
4 Antworten
Verstehe ich das so richtig?:
Zufallserzeugung von nem string (captcha), Verschlüsselung mit deinem passwort,hash des verschlüsseltem captcha strings, der verschlüsselte captcha string wird in ein hidden feld gepackt und der originale als image. Der Besucher gibt dann das was er sieht in eine textbox und der server verschlüsselt das mit dem statischen schlüssel und hasht das wieder und prüft dann das mit dem aus dem hidden feld gesendeten string?
Möglich aber die verschlüsselung kannst du dir sparen, der hash ist eh nen einmal Verfahren. Was aber bei deinem system fehlt ist die manipulationssicherheit. Einmal kurz ne anfrage von hand machen, die header "notieren" und dem bot sagen was er im hidden feld anstatt deinen gesetzten wert nehmen soll und was er in der "textbox" senden soll wo der captcha in plain rein soll. Kurz gesagt: der schlüssel würde sich unendlich mal benutzen lassen und dein schutz ist uneffektiv.. abhilfe zb mit der Kombination mit sql und der begrenzung des captchacodes auf einmalige verwendung
gern. wenn sich tatsächlich einer so gedanken macht bin ich auch bereit etwas ausführlicher zu helfen. :D
Vielen Dank, soweit hatte ich noch gar nicht gedacht - damit hast Du mir die entscheidende Schwachstelle in meinem "Captcha-Konzept" aufgezeigt.
Der Lösung von https://www.webappz.de/captcha verwendet ein Verfahren, was so ähnlich funktioniert wie ihr das oben beschrieben habt. Für nicht kommerizelle Webseiten ist das sogar kostenlos verfügbar.
Ich habe mir was ähnliches auch schon programmiert.
Das Skript erzeugt einen Hash, gibt ihn so wie Du es beschrieben hast in einem hidden field aus. Den Hash speichere ich gleichzeitig in einer $_SESSION Variable. Das Empfänger-Skript vergleicht die $_POST und die $_SESSION Variable. Wenn identisch dann gut :)
Das funktioniert aber unabhängig vom Captcha. Und meiner Meinung nach ist das ausreichend.
Ein Captcha ohne Cookie / Session halte ich für nicht realisierbar
Ich hab sowas ähnliches mal gemacht, indem ich eine sich jedesmal ändernde Rechenaufgabe stellte, an das Ergebnis kam noch ein Wort, und das dann mit MD5 verschlüsselt. Das kam in ein hidden-Feld zum Vergleich mit der Nutzer-Eingabe. Die Aufgabe wurde jedesmal zur Anzeige/Lösung mit PHP in ein Bild umgewandelt und mit Timestamp gespeichert. Hat wunderbar funktioniert, kein Spam oder Angriffsversuche mehr im Gästebuch.
achja und wenn du sessions verwenden würdest könnte man übrigens das was aktuell im hidden feld steht nichtmehr effektiv verändern. man authentifiziert sich am server via cookie das dann die daten auf dem dateisystem des server liest und in den Daten stehen die "sessionwerte" vom jeweiligen client.