Integration mit JavaScript und PHP
Erfahre, wie du POWER CAPTCHA mit JavaScript in dein bestehendes Formular integrierst und das Token mit PHP verifizieren kannst.
Nachdem du deinen API-Key erstellt und konfiguriert hast, kannst du direkt loslegen und POWER CAPTCHA in dein Formular integrieren.
Die Integration besteht aus zwei Schritten:
- Die Einbindung des POWER CAPTCHA Widgets in dein Formular
- Die Verifizierung des Tokens nach dem Absenden des Formulars
Einbindung in dein Formular
JavaScript hinzufügen
Füge unser JavaScript auf der Seite ein, auf der das Formular dargestellt wird:
<script src="https://cdn.power-captcha.com/v1/power-captcha-1.2.8.min.js" type="text/javascript" defer></script>
Das JavaScript kann sowohl im <head>
-Element als auch am Ende der Seite (vor dem </body>
-Element) eingefügt werden.
Widget einbinden
Füge innerhalb des zu schützenden Formulars folgendes <div>
-Element hinzu und ersetze die Platzhalter in den Attributen data-pc-api-key
und data-pc-client-uid
. Innerhalb des <div>
-Elements wird das POWER CAPTCHA-Widget dargestellt.
<form>
...
<div data-pc-api-key="<apiKey>"
data-pc-client-uid="<eindeutigeClientId>">
</div>
...
</form>
Platzhalter <apiKey>
ersetzen
Der Platzhalter <apiKey>
muss mit deinem API-Key ersetzt werden.
Platzhalter <eindeutigeClientId>
ersetzen
Der Platzhalter <eindeutigeClientId>
muss durch einen dynamischen Wert ersetzt werden, über den der Client eindeutig identifiziert werden kann.
Dies kann zum Beispiel die IP-Adresse des Clients sein. Wichtig ist, dass derselbe Wert auch bei der Verifizierung des Tokens übergeben wird.
Hier ein Beispiel, wie die Client-ID basierend auf der IP-Adresse mit PHP generiert werden kann:
data-pc-client-uid="<?php echo hash('sha256', $_SERVER['REMOTE_ADDR']); ?>"
Wenn deine Website hinter einem Reverse-Proxy betrieben wird, gibt $_SERVER['REMOTE_ADDR']
möglicherweise nicht die IP-Adresse des Clients zurück.
Stattdessen wird die IP-Adresse des Clients je nach Konfiguration des Proxies in bestimmten Headern übermittelt, oft in X-Forwarded-For
oder X-Real-IP
.
In PHP können diese Header mit $_SERVER['HTTP_X_FORWARDED_FOR']
bzw. $_SERVER['HTTP_X_REAL_IP']
ausgelesen werden.
Zusätzlicher Schutz eines Input-Felds (optional, nur Enterprise-Tarif)
Falls du einen Enterprise-Tarif hast, kannst du für zusätzlichen Schutz ein Input-Feld (z.B. Benutzername / E-Mail-Adresse) mit POWER CAPTCHA sichern. Dazu muss das Input-Feld mit dem Attribut data-pc-user
versehen werden. Darüber erkennt unser JavaScript, welches Feld geschützt werden soll. Beispiel:
<input name="username" type="text" required data-pc-user="" />
Bitte beachte, dass der Wert des Input-Felds bei der Token-Verifizierung unverändert übertragen werden muss.
Beispiel Login-Formular mit PHP und HTML
Ein einfaches Login-Formular, welches mit POWER CAPTCHA geschützt wird, könnte beispielsweise so aussehen:
<form method="post" action="submit.php">
<label for="username">Username:</label><br />
<input type="text" id="username" name="username" required data-pc-user="" /><br />
<label for="password">Password:</label><br />
<input type="password" id="password" name="password" />
<div data-pc-api-key="<apiKey>"
data-pc-client-uid="<?php echo hash('sha256', $_SERVER['REMOTE_ADDR']); ?>">
</div>
<input type="submit" value="submit" />
</form>
Weitere Einstellungs- und Einbindungsmöglichkeiten
Weitere Optionen und Einstellungsmöglichkeiten (z.B. Prüfmodus / Widget verstecken) findest du hier unter Konfiguration des Widgets.
Token-Verifizierung im Backend
Das Widget fügt deinem Formular automatisch ein unsichtbares Input-Feld pc-token
hinzu.
Dieses Feld enthält ein Token, das du in deinem Backend verifizieren kannst.
Darüber kannst du sicherstellen, dass der Zugriff überprüft wurde und berechtigt ist (z.B. ob das Captcha ordnungsgemäß gelöst wurde).
Prüfen, ob das Input-Feld pc-token
gefüllt ist
Vor der eigentlichen Verifizierung sollte geprüft werden, ob das Input-Feld pc-token
vorhanden ist und gefüllt wurde.
Ist dies nicht der Fall, wurde vor dem Absenden des Formulars kein Token generiert und der Zugriff ist somit unberechtigt.
<?php
if(!isset($_POST['pc-token']) || empty($_POST['pc-token'])) {
// Abbruch, da kein Token vorhanden
die("Kein Captcha-Token vorhanden.");
// Alternativ kannst du hier auch eine erweiterte Fehlerbehandlung einfügen
}
// Fortfahren mit der Token-Verifizierung
Anfrage an die Verifikations-API
Die Verifizierung erfolgt über unsere API (https://api.power-captcha.com/pcu/v1/verify
).
An diese Schnittstelle müssen einige Parameter, wie z.B. der Feld-Inhalt aus pc-token
, als JSON-Body per POST gesendet werden.
Innerhalb von PHP kann die Schnittstelle per cURL aufgerufen werden.
cURL initialisieren
Dazu muss curl
zunächst initialisiert werden. Hierbei ist es wichtig, dass im HTTP-Header das Feld X-API-Key
mit deinem API-Key belegt wird. Außerdem muss der Content-Type
auf application/json
gesetzt sein.
$curl = curl_init('https://api.power-captcha.com/pcu/v1/verify');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'X-API-Key: <apiKey>', // Dein API-Key
'Content-Type: application/json'
));
Der Platzhalter <apiKey>
muss mit deinem API-Key ersetzt werden.
JSON-Body erstellen
Den JSON-Body mit den Parametern für die Verifizierung kannst du über ein array
und die PHP-Methode json_encode
generieren.
$json_body = json_encode(
array(
'secret' => '<secretKey>', // Dein Secret-Key
'token' => $_POST['pc-token'], // Inhalt des Token-Felds
'clientUid' => hash('sha256', $_SERVER['REMOTE_ADDR']), // eindeutige Client ID (selber Wert wie im data-client-uid Attribut)
'name' => $_POST['username'] // Unveränderter Wert des Feldes, das mit 'data-pc-user' markiert wurde (optional, nur Enterprise-Tarif)
)
);
Der Platzhalter <secretKey>
muss mit deinem Secret-Key ersetzt werden.
Detaillierte Informationen zum Aufbau des JSONs sowie zu den Parametern findest du unter Verifizierung des Tokens.
Anfrage absenden
Den $json_body
kannst du nun als POST-Anfrage in curl setzen:
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_body);
Im Anschluss kannst du die Verifizierungs-Anfrage per curl_exec
an unsere API übermitteln. Die Antwort wird per json_decode
dekodiert und als Objekt zur Verfügung gestellt.
$response = json_decode(
curl_exec($curl)
);
Bevor du die Antwort auswertest, solltest du curl_close
aufrufen, um die Verbindung zu beenden.
curl_close($curl);
Auswertung der Antwort
In der Variable $response
steht das Ergebnis der Verifizierung. Hier ist vor allem das Feld success
relevant, welches angibt, ob die Token-Verifizierung erfolgreich war und das Token gültig ist.
Mit folgendem Code wird das Ergebnis geprüft. Wenn $response->success == true
ist, also das Token gültig ist, kannst du mit der Verarbeitung deines Formulars fortfahren.
Andernfalls (Token ungültig oder Fehler bei der Verifizierung) wird die Ausführung abgebrochen.
if($response->success) {
// Verifizierung erfolgreich und Token gültig
// Hier kannst du deinen Code für die weitere Verarbeitung deines Formulars einfügen
} else {
// Abbruch, da Token ungültig oder Fehler bei der Verifizierung
die("Fehler: Captcha-Token ungültig oder Verifizierung fehlgeschlagen.");
// Alternativ kannst du hier auch eine erweiterte Fehlerbehandlung einfügen
}
Eine nicht erfolgreiche Verifizierung ($response->success == false
) kann verschiedene Ursachen haben.
Weitere Informationen dazu findest du unter Verifizierung des Tokens.
Vollständiger Beispiel-Code
<?php
// Prüfen, ob das Input-Feld pc-token gefüllt ist
if(!isset($_POST['pc-token']) || empty($_POST['pc-token'])) {
// Abbruch, da kein Token vorhanden
die("Kein Captcha-Token vorhanden.");
// Alternativ kannst du hier auch eine erweiterte Fehlerbehandlung einfügen
}
// curl initialisieren
$curl = curl_init('https://api.power-captcha.com/pcu/v1/verify');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'X-API-Key: <apiKey>', // Dein API-Key
'Content-Type: application/json'
));
$json_body = json_encode(
array(
'secret' => '<secretKey>', // Dein Secret-Key
'token' => $_POST['pc-token'], // Inhalt des Token-Felds
'clientUid' => hash('sha256', $_SERVER['REMOTE_ADDR']), // eindeutige Client ID (selber Wert wie im data-client-uid Attribut)
'name' => $_POST['username'] // Unveränderter Wert des Feldes, was mit 'data-pc-user' markiert wurde (optional, nur Enterprise-Tarif)
)
);
// JSON-Body als POST-Anfrage setzen
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_body);
// Anfrage absenden
$response = json_decode(
curl_exec($curl)
);
curl_close($curl);
// Antwort auswerten
if($response->success) {
// Verifizerung erfolgreich und Token gültig
// Hier kannst du deinen Code für die weitere Verarbeitung deines Formulars einfügen
} else {
// Abbruch, da Token ungültig oder Fehler bei der Verifizerung
die("Fehler: Captcha-Token ungültig oder Verifizierung fehlgeschlagen.");
// Alternativ kannst du hier auch eine erweiterte Fehlerbehandlung einfügen
}