2010-12-08 6 views
1

Ich versuche herauszufinden, wie man den reCAPTCHA-Schlüssel am besten saniert und validiert. Das Problem ist, ich habe nicht viele Informationen darüber, wie sie Schlüssel gebildet werden. Ich denke, der beste Weg besteht darin, einfach zu überprüfen, ob die Zeichenfolge 40 Zeichen lang ist und Buchstaben, Zahlen, Bindestriche und Unterstriche enthält. Hier ist die Information, die ich von den Dokumenten habe.validiere reCAPTCHA Key

invalid-site-public-key: Haben Sie sichergestellt, dass der gesamte Schlüssel mit allen Bindestrichen und Unterstrichen, aber ohne Leerzeichen kopiert wird? Der Schlüssel sollte genau 40 Buchstaben lang sein. Source

Meine öffentlichen Schlüssel sieht aus wie dieses 6Ler570SAAAAAOfjh3CNFPtuBSH_QdavHc5x_JUv ich mache mir nur Sorgen um die Validierung zu schreiben, die zu streng ist und einige Leute werden das Plugin nicht zulassen, dass ich schreibe.

Dies ist, was ich jetzt benutze, aber nicht sicher, ob es einen besseren Weg gibt.

if($recaptcha_public_key) { 
    //validate the key 
     $recaptcha_public_key = filter_var($recaptcha_public_key, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/[0-9a-zA-Z_-]{40}/"))); 
    // Update value in database 
    update_option('recaptcha_public_key', $recaptcha_public_key); 
} 

Vielen Dank!

Antwort

1

Was Sie haben ("/[0-9a-zA-Z_-]{40}/") ist so streng, wie Sie bekommen werden. Der Schlüsselpunkt ist, dass es zufällig ist - wenn es einem strengen Satz von Formatierungsregeln entspricht, wäre es leicht zu knacken.

Ohne eine Reihe öffentlicher Schlüssel zu analysieren, kann davon ausgegangen werden, dass jedes Zeichen innerhalb des Satzes [0-9a-zA-Z_-] völlig zufällig ist. Selbst wenn diese Annahme falsch ist und es ein bestimmteres Muster gibt, würde sich dies wahrscheinlich irgendwann in der Zukunft ändern, so dass es keine gute Idee ist, Ihre Anwendung an das aktuelle Muster zu binden.

2

Warum verifizieren Sie es selbst? Sie treffen Ihre Datenbank nicht mit den Informationen oder zeigen sie auf der Seite an. Wenn Sie es auf die Seite setzen, html es verschlüsseln und das sollte verhindern, dass Skripts ausgeführt werden.

Sie sollten es einfach an die dritte Partei mit http://www.google.com/recaptcha/api/verify senden und es wird es validieren (wie es in http://code.google.com/apis/recaptcha/docs/verify.html angibt).

+0

Ich erstelle ein Plugin für YOURLS, und auf der Admin-Seite geben die Benutzer ihren privaten und öffentlichen Schlüssel ein, der in der Datenbank gespeichert wird, bis ich die Schlüssel abrufen muss, um das Captcha zu validieren. – BandonRandon

0

Dies scheint perfekt

if(preg_match('#^6[0-9a-zA-Z_-]{39}$#', $key)){ 
    // Valid key 
} 

Dies sind die aktuellen Bedingungen der Schlüssel zu sein:

  • 40 Zeichen
  • beginnen mit einer "6"
  • nur alphanumerische, unterstreichen und Strich Zeichen
+0

Danke für Ihre Antwort. Der Schlüssel beginnt jedoch nicht immer mit einer 6, das war nur ein Beispiel. Während ich verstehe, dass Ihre Antwort hauptsächlich um die Regex-Validierung ging, die ich erwähnen wollte, da diese Frage jetzt 6 Jahre alt ist, verwendet Google/reCAPCHA nicht mehr [Secret Token Validation] (https://developers.google.com/recaptcha/docs/secure_token). Stattdessen verwenden sie [Domain Name Validation] (https://developers.google.com/recaptcha/docs/domain_validation) – BandonRandon

+0

Oh ich sehe, ich habe es neulich getestet und es funktioniert, aber ich denke, das war wegen der DomänennameDanke für die Information; Zeit für mich, ein paar Updates zu machen :) – Yani

+0

Ich schaute gerade zurück und es scheint, dass beide Schlüssel noch benutzt werden. – Yani