12 Stimmen

PHP Captcha ohne Sitzung

Ok, hier ist ein Problem: in dem Projekt, an dem ich arbeite, können wir nicht auf Server-seitige Sitzungen für jede Funktionalität verlassen.

Das Problem besteht darin, dass gängige Captcha-Lösungen zur Verhinderung von Roboterübermittlungen eine Sitzung erfordern, um die Zeichenfolge zu speichern, mit der das Captcha verglichen werden soll.

Die Frage ist: Gibt es eine Möglichkeit, das Problem zu lösen, ohne Sitzungen zu verwenden? Was mir in den Sinn kommt, ist ein verstecktes Formularfeld, das einen Hash enthält, zusammen mit einem Captcha-Eingabefeld zu verwenden, so dass der Server diese beiden Werte miteinander abgleichen kann. Aber wie können wir diese Methode sicher machen, so dass es nicht verwendet werden könnte, um Captcha leicht zu brechen.

4voto

Costas Punkte 41

Die Notwendigkeit einer Sitzung oder einer Datenbank ergibt sich aus der Notwendigkeit, den GET für das Bild mit der HTML-Seite, die es enthält, zu koordinieren; wie wäre es also, denselben Code zu verwenden, um ein Captcha-Bild einzubetten? [img src='data:image/jpeg;base64,...'], einen zufälligen Salt zum Hashing des Textes verwenden und dann den zufälligen Salt und den Hash zusammen mit dem Bild in einem einzigen GET an den Client senden?

Beim Postback hängen Sie den Benutzertext an den Salt an und vergleichen dann die Hashes. Ich frage mich nur, wie sicher dies sein würde...

3voto

Strae Punkte 17669

Verwenden Sie die Honigtopf Technik ein Textfeld mit einem gefräßigen Namen, wie 'email', in ein per CSS verborgenes Feld (display: none; visibility: hidden;) einfügen.

Wenn Sie das Formular bereinigen müssen, prüfen Sie einfach, ob das Feld leer ist, von einem Menschen gesendet wird (der das Feld nicht sehen und daher nicht ausfüllen kann) oder von einem Spammer stammt.

Deshalb füllen Spammer in der Regel alle Felder auf der Seite mit vordefinierten Werten aus, bevor sie das Formular abschicken... und stören den Benutzer nicht beim Lesen des Captcha.

Andernfalls verlassen Sie sich auf die menschliche Lektüre etwa "Schreiben Sie den ersten $x-Buchstaben des Wortes "$Wort" in das Feld:".

Dann müssen Sie nur noch $x und $word an die nächste Seite senden und überprüfen (und natürlich können Sie die Feldnamen nach dem Zufallsprinzip vergeben, um die Genauigkeit zu erhöhen)

Ich erinnere mich, dass ein Plugin für phpBB-Forum auf der Tatsache beruhen, dass die Spam-Bots in der Regel die erste verfügbare Option (mit einem Wert) in der Datenbank auswählen. <select> Felder; Einfach als erste Option angeben <option value="kickmeplease">Yes, im a bot.</option>

Es gibt viele Möglichkeiten, sich gegen Spambots zu schützen, die auf einen Faktor setzen, den Bots nie haben werden: Vorstellungskraft.

2voto

Chad Brewbaker Punkte 2465

Automatisches Ausfüllen einer UUID des CAPTCHA zusammen mit der Benutzerantwort im POST. Kinderleicht.

2voto

Rizerzero Punkte 992

Mach einfach ein Mathe-Captcha ;) 2+90 = ? Gleichung sollte in einem Bild angezeigt werden und voila ;)

2voto

Dan Punkte 2663

Der CAPTCHA-Generator soll ein Bild zurückgeben und einen gesalzenen Hash oder einen benutzerdefinierten Hash für die Antwort verwenden (Betonung auf gesalzen/benutzerdefiniert). Der Generator soll diesen Hash in ein Cookie schreiben. Der Server kann dann auf der Grundlage des Wertes im Cookie validieren. Dafür ist kein JavaScript erforderlich, aber wenn Cookies deaktiviert sind, müssen Sie auf eine andere Technik zurückgreifen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X