Captcha web service
Wir stehen immer wieder vor der Herausforderung die verschiedensten Web-Dienste und Formulare gegeb Bots zu schützen. Insbesondere Kontaktformulare sind ein beliebtes Ziel. Captchas sind ein erprobtes Werkzeug gegen diese (SPAM-) Bots. Damit wir das Rad nicht auf jeder Webseite neu erfinden müssen haben wir diesen kleinen Dienst entwickelt.
Die Captchas werden mit der unter der GPL3 lizensierten Captcha-Klasse von Jose Rodriguez erstellt.
Eine Beispiel Implementierung für ein PHP gestütztes Formular mit jQuery-Unterstützung auf der Client-Seite:
HTML Quelltext für die Website:
<!-- Image location -->
<span id="captchaImage"></span>
<!-- Get image from server -->
<script>
function getCaptcha() {
$.ajax({
method: 'POST',
url: '//captcha.netzmal.de/getSession.php',
dataType: 'json'
}).done(function(data) {
$('#captchaImage').html('<img
src="//captcha.netzmal.de/captcha.php?session=' + data.session.id + '">');
$('#captchaSession').val(data.session.id);
});
}
getCaptcha();
</script>
<!-- User form -->
Please enter Captcha here:<br>
<form action="yourFormHandler.php" method="get" target="_blank">
<input type="hidden" id="captchaSession" name="captchaSession" value="">
<input type="text" name="captcha" value=""><br>
<input type="submit" value="Check Captcha"><br>
...
</form>
Please enter Captcha here:
Output:
PHP Quelltext:
<?php
// Init result
$captcha_ok = false;
try {
// Read user input
$captcha = "";
if (isset($_POST['captcha'])) {
$captcha = $_POST['captcha'];
} else if (isset($_GET['captcha'])) {
$captcha = $_GET['captcha'];
}
$session = "";
if (isset($_POST['captchaSession'])) {
$session = $_POST['captchaSession'];
} else if (isset($_GET['captchaSession'])) {
$session = $_GET['captchaSession'];
}
$data = http_build_query(array('captcha' => $captcha, 'session' => $session));
// HTTPS request
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, 'https://captcha.netzmal.de/check.php?' . $data);
curl_setopt($curl, CURLOPT_POST, false);
$res = json_decode(curl_exec($curl), true);
if ($res['captcha']['ok'] == 1) {
$captcha_ok = true;
}
curl_close($curl);
} catch (Exception $e) {
}
// What to do...
if ($captcha_ok) {
print "Entered captcha is _OKAY_";
} else {
print "Entered captcha is _WRONG_";
}