Captcha
bearbeitet von RaketeninstandhaltungsmechanikerZum einen habe ich beim "blind schreiben" zwei Klammern vergessen, zum anderen hat der Quelltexthighlighter des Forum irgendwie meinen Quelltext "verhunzt" ( `___PHP0___`, `___PHP2___;` hab ich nicht getippt...).
Was jetzt unten steht ist also getestet.
Erstes Snippet. Das Captcha "standalone":
~~~php
<?php
require_once 'ftxCaptcha.php';
$captcha = new ftxCaptcha();
if(
isset( $_POST['ftxAnswer'] )
and isset( $_POST['ftxAnswer'] )
and ( $captcha -> validateAnswer( $_POST['ftxAnswer'], $_POST['hash'] ) )
) {
echo '<p>Fein! Du hast das Captcha gelöst.</p>';
} else {
echo '<p>Löse das Captcha!</p>';
$captcha -> getForm( 'POST' );
}
~~~
Zweites Snippet: Das Captcha in ein Formular einbauen:
~~~
<?php
require_once 'ftxCaptcha.php';
$captcha = new ftxCaptcha();
if(
isset( $_POST['ftxAnswer'] )
and isset( $_POST['ftxAnswer'] )
and ( $captcha -> validateAnswer( $_POST['ftxAnswer'], $_POST['hash'] ) )
) {
######################################
# Hier Nachricht senden, bestätigen: #
######################################
header('Location: danke.html');
} else {
if( isset($_POST['name'] ) ) {
$name = $_POST['name'];
} else {
$name = '';
}
if( isset( $_POST['name'] ) ) {
$message = $_POST['message'];
} else {
$message = '';
}
?><form method="post">
<label>Ihr Name:
<input name="name" value="<?=htmlentities( $name, ENT_COMPAT | ENT_HTML5 ); ?>">
</label>
<label>Ihre Nachricht:
<textarea name="message"><?=htmlentities( $message, ENT_NOQUOTES | ENT_HTML5 );?></textarea>
</label>
<?php $captcha -> getForm( false ); ?>;
<button>senden</button>
</form>
<?php
}
?>
~~~
Nicht vergessen in der [ftxCaptcha.php](https://code.fastix.org/showFile.php?file=Projekte/PHP%3AftxCaptcha/ftxCaptcha.php) in Zeile 3 das Geheimnis auzutauschen. So lange dort das Original steht wird das Skript abbrechen.
**Kritik**
- Es gibt maximal 300 (10² * 3 ) verschiedene Aufgaben, die sich aber bei näherer Betrachtung als 2 * 10² / 2 (Bei Addition und Subtraktion ist die Reihenfolge egal) + 10², also 200 verschiedene Aufgaben erweisen.
- Als Ergebnis kommen nicht viele Zahlen in Betracht, die Zahlen zwischen 2 und 8 mit signifikant erhöhter Wahrscheinlichkeit, bis 20 mit erhöhter Wahrscheinlichkeit, über 20 nur bei Mulitplikation.
- Ein „Brut-Force-Attacke“ würde ich einfach damit probieren, stur entweder die 4,6,8 oder die 9 wiederholt zu senden.
- Dem könnte man begegnen, in dem man den Zahlenraum (bei mir 1 bis 10) vergrößert. Allerdings wird das wieder nutzerunfreundlich, denn etwas wie „14*233=“ löst längst nicht jeder im Kopf.
- Andererseits könnte ein Angreifer auch den String mit der Aufgabe parsen. Mir erscheint das als „unglaublich einfach“ - **aber aus genau diesem Grund kann ich mein Geld auch anders verdienen.**
**Hint:**
Im Übrigen setze ich beim Kontaktformular eher auf einen Spamfilter. [Der meine funktioniert seit anderthalb Jahrzehnten recht ordentlich](https://code.fastix.org/Projekte/PHP%3ASpam-Erkennung%20f%C3%BCr%20Mail-%20und%20Kontaktformulare/), es kommt inzwischen vielleicht ein oder zwei mal im Jahr was durch:
* Um so mehr ärgere ich mich dann 👿.