Willkommen in der Webstatt Zum Webstatt Blog und Stories
Michael Michael am 06.07.06 21:28

Gerade bei Dr. Web (http://www.drweb.de/weblog/weblog/?p=599) gelesen. Eine meine Meinung nach interessante und gleichermaßen simple Möglichkeit: Man stellt als Spamschutz eine Rechenaufgabe.
Natürlich besteht wie immer die Gefahr, dass auch diese Aufgaben geparst würden. Theoretisch könnte man die Aufgaben ja auch als Bilder einlesen.

Was meint ihr? Eine sinnvolle Idee?

netcup.de Warum gibt es hier Werbung?
crooked am 06.07.06 21:37

njoa also das wird man ja dann bei drweb sehen (da wirds schon angewendet).
die idee finde ich gut, aber ich weiß net, ob alle so eine aufgabe gelöst kriegen .oO

fish fish am 06.07.06 21:39

hm weiss nicht.. mit gefällt das von barrabas klicken auf jeden fall besser.
eine alternative wäre, dass man nur auf die richtige lösung klicken muss. mir sind zu viele eingaben immer zuwieder. lieber spamschutz "für die maus"

Dustwolf Dustwolf am 06.07.06 21:40

Also für einzelne Einsätze ist die Methode sicherlich ausreichen. Allerdings muss man so ein System entwerfen und nur selber benutzen, denn wenn ein Script das übernimmt und dieses Script zum Download angeboten wird, dann bringt das nichts mehr.
Je häufiger die Ausgabe in der Form vorkommt, desto mehr lohnt sich eine Lösungstechnik für Spammer.
Dennoch finde ich die Methode besser als diese unleserlichen Pixelhaufen. Ich würde mir allerdings ein System schreiben, welches aus einer Datenbank ein paar Rechenaufgaben entnimmt, eine aussucht und dann dazu Antwortmöglichkeiten angibt. Eine stimmt dann eben. :D
Das hat den Vorteil, dass der User die Tastatur nicht benötigt, sondern per Maus einen Radiobutton aussuchen kann und dazu nur einen Mausklick braucht!

Zeronet Zeronet am 06.07.06 21:45

Auf jeden Fall eine bessere Alternative als manchmal schier unentzifferbare Captchas .. und barrierefreier wärs auch gleich.

Michael Michael am 06.07.06 21:46

Quote
Original von fish
hm weiss nicht.. mit gefällt das von barrabas klicken auf jeden fall besser.
eine alternative wäre, dass man nur auf die richtige lösung klicken muss. mir sind zu viele eingaben immer zuwieder. lieber spamschutz "für die maus"


Barrierefreiheit... ;)

Quote
Original von Dustwolf
Allerdings muss man so ein System entwerfen und nur selber benutzen, denn wenn ein Script das übernimmt und dieses Script zum Download angeboten wird, dann bringt das nichts mehr.


Man generiert eine handvoll Bilder, speichert diese mit Ergebnis in der Datenbank und es wird für SPAM Bot schwer. Natürlich kann man auch das parsen, aber naja...
Allerdings sind dann wieder alle ohne Bilder ausgeschlossen

Kevz am 06.07.06 22:28

Wieso je öfter eine Aufgabe vorkommt?
Dann speicher doch einfach die Aufgabe die bereits kam in einer Seperaten Datenbank Tabelle. So kannst du Praktisch umgehen, das eine Aufgabe Doppelt vorkommt :D Mach das ganze noch mit Random, dann siehts hübscher aus ;)

fish fish am 06.07.06 22:46

Quote
Original von Michael
Allerdings sind dann wieder alle ohne Bilder ausgeschlossen

die mit ohne bilder sind doch sowieso fast nur bots. die wir ja nicht wirklich haben wollen. oder?

Michael Michael am 06.07.06 22:49

Textbrowser, WAP Geschichten, ...
Man könnte als Ersatz noch die Aufgabe in den ALT Tag schreiben - was Bots aber wieder parsen könnten.

Dustwolf Dustwolf am 07.07.06 01:07

Ich bin ja der Meinung, am besten ne Auswahl an drei bis fünf Antworten auf zufällig gewählte Fragen ohne Mathematik.
Beispielsweise: Wo steht der Eifelturm?


Das ist schwer für einen Bot, aber leicht für einen Menschen.

Michael Michael am 07.07.06 08:56

Theoretisch sicherlich eine sinnvolle Ergänzung, man müsste aber darauf achten, die Fragen eindeutig zu stellen (bei deiner Frage wäre theoretisch ja sowohl Frankreich, Paris usw). Weiterhin wären Rechtschreibefehler oder auch die sprachliche Portabilität eventuell ein Problem.

Wie wäre es, wenn wir hier nach einem tollen super SPAM Schutz suchen, der vorzugsweise auch ohne Bilder, JS, Maus,... funktioniert

Dustwolf Dustwolf am 07.07.06 10:33

Ich werd ggf. nach meiner Idee eine Class erstellen und diese dann hier ins Forum stellen. Vllt. finden sich dann ja einige kreative Ideen und man kann das Ding weiterentwickeln. :D

Michael Michael am 07.07.06 10:57

Sehr guter Anfang *freu*

Franky Franky am 07.07.06 11:15

Also BRBs lösung mit dem Draufklicken finde ich schonmal sehr gut.
man könnte vll auch einfach so einen satz machen wie...
wieviele buchstaben erhält das wort "haus"?
oder irgendwie auf ein bild dynamisch kreise oder sowas zeichnen und dann den user zählen lassen...
// oder noch stumpfer..."wieviel ecken hat ein haus mit 6 ecken?"

man gucke sich auch mal die kommentare an, z.B.:

Quote
Diese Idee hatte ich schon einmal vor reichlich einem Jahr gehabt. Der Grund, warum ich es noch nicht umgesetzt habe: bei mir fehlt der Spam ;-). (Von daher ist ein selbstentwickeltes Skript schon einmal der beste Schutz)

Ansonsten sehe ich das Problem von Christian nicht. Warum muß ich die Rechenaufgaben immer nach einen festen Schema gestalten? Ich schrieb damals als Beispiel:

* Wieviel ist 3 und 4?
* Wieviel ist drei plus vier?
* Du nimmst 3, addierst vier

Und ich würde das Plugin folglich nicht "Math Comment ..." nennen, sondern es bei verbalen Fragen belassen (die durchaus Mathematik enthalten können).
[..]

nuit nuit am 07.07.06 12:42

naja...aber da ist ja das gleiche problem das man mit Captchas auch hat....das ist sogar einfacher zu knacken, weil du keine Buchstaben drinhast, sondern ziffern und */-+...
und wenn du Textaufgaben hast, hast du wieder das Sprachen problem ??? ;D

ich denke...diese Rechnung ist einfacher zu knacken, als normale Captchas...

Dustwolf Dustwolf am 07.07.06 12:44

<?php

class antispam{
var $frage;
# Speichert die Frage
var $antwort;
# Speichert die ID der richtigen Antwort.
var $antwortmenge;
# Speichert die Menge an Antworten in der Datenbank.

function __construct(){
$this->datenbank(false, "DELETE FROM antispam_eintraege WHERE Zeitpunkt<".time());
# Alte Usereintraege loeschen (Frage und richtige Antwort fuer die User)

mysql_connect('server', 'user', 'passwort');
mysql_select_db('datenbank');
# Zur Datenbank verbinden

$abfrage = $this->datenbank(true, "SELECT COUNT(*) AS Wert FROM antispam_antworten");
if ($abfrage[0]['Wert'] > 2)
$this->antwortmenge = $abfrage[0]['Wert'];
else
die('<b>Nicht genug Fragen!</b>');
# Menge an Antworten abfragen, ueberpruefen und speichern

$abfrage = $this->datenbank(true, "SELECT COUNT(*) AS Wert FROM antispam_fragen");
srand(time());
$i = rand(1, $abfrage[0]['Wert']);
# Menge an Fragen in der Datenbank ermitteln und eine Zufaellig aussuchen

$abfrage = $this->datenbank(true, "SELECT Frage, Antwort FROM antispam_fragen WHERE ID=".$i);
$this->frage = $abfrage[0]['Frage'];
$this->antwort = $abfrage[0]['Antwort'];
# Gezielte Frage aus der Datenbank abrufen und mit der richtigen Antwort speichern
}

function datenbank($ausgabe = true, $query = ''){
# Zur Abfrage und Eingabe von Daten der Datenbank
$abfrage = mysql_query($query);
if ($ausgabe == true){
# Wenn $ausgabe == true ist, wird ein Array zurueckgeben, dass die Datensätze wie folgt beinhaltet:
# $daten[] beinhaltet die diversen abgefragten Zeilen der Datenbank
# Das Unterarray $daten[][] beinhaltet die Daten der Felder, wobei das Feld ID der ersten abgerufenen Zeile so ausgegeben werden kann: echo $daten[0]['ID'];
# Beginnt mit 0, statt mit 1!!!
#
# Ansonsten wird nur ein true zurückgegeben.
for($i=0;$i<mysql_num_rows($abfrage); $i++)
$daten[$i]=mysql_fetch_array($abfrage);
return $daten;
} else
return true;
}

function frage_stellen(){
$antworten[0] = $this->antwort;
$i = 1;
while ($i < 3) {
$antworten[$i]=rand(1, $this->antwortmenge);
if (($i == 1) AND ($antworten[1] <> $antworten[0]))
$i = 2;
elseif (($i == 2) AND ($antworten[2] <> $antworten[0]) AND ($antworten[2] <> $antworten[1]))
$i = 3;
}
# Das Script ermittelt drei Antworten (die IDs davon)
# Es darf in der Datenbank keine ID von der ersten bis zur letzten fehlen, da das Script davon ausgeht, wenn 9 Zeilen in der Datenbank gefunden werden, dann sind das die IDs 1 bis 9.

$abfrage = $this->datenbank(true, "SELECT ID, Antwort FROM antispam_antworten WHERE ((ID=".$antworten[0].") OR (ID=".$antworten[1].") OR (ID=".$antworten[2]."))");
# Fragt die Antworten aus der DB ab

echo '<form action="antispam.php" method="POST"><b>'.$this->frage.'</b><br>';
$id = time()-rand(0,time());
# Legt eine ID zur Identifikation des Users an (fuer Formular und Datenbank)
echo '<input type="hidden" value="'.$id.'" name="id">';
foreach($abfrage as $t)
echo '<input type="radio" value="'.$t['ID'].'" name="antwort">'.$t['Antwort'].'<br>';
echo '<input type="submit" value="Antworten" name="senden"></form>';
# Ausgabe des Formulars

$this->datenbank(false, "INSERT INTO antispam_eintraege (ID, Zeitpunkt, Antwort) VALUES (".$id.", ".(time()+300).",".$this->antwort.")");
# Speichert die Eintraege fuer das Antispamscript (Userwiedererkennung und Aufloesungsdaten fuer die Fragen)
}

function ueberpruefung($id, $antwort){
# $id und $antwort sind Variablen, die die Werte aus dem Formular speichern
$abfrage = $this->datenbank(true, "SELECT * FROM antispam_eintraege WHERE ID=".$id);
# Fragt die Userdaten ab (richtige Antwort auf die Frage)

if ($abfrage[0]['Antwort'] == $antwort){
echo 'In Ordnung!';
$this->datenbank(false, "DELETE FROM antispam_eintraege WHERE ID=".$id);
# Richtige Antwort; Eintrag fuer User kann sofort aus der Datenbank entfernt werden
} else
echo 'Gesperrt!';
# False Antwort.
}

}
$antispam = new antispam();
# Start des Scripts

if (isset($_POST['id']))
$antispam->ueberpruefung($_POST['id'], $_POST['antwort']);
else
$antispam->frage_stellen();
# Ist ein Formular uebergeben worden? Entsprechend wird aufgeloest oder eine Frage gestellt.

?>
<br><a href="antispam.php">neu laden</a>


Entsprechende Tabellen in der Datenbank:
antispam_fragen:
ID: Int(4)
Frage: Varchar (256)
Antwort: Int(3)

antispam_antworten:
ID: Int(3)
Antwort: Varchar(256)

antispam_eintraege:
ID: Int(12)
Zeitpunkt: Int(12)
Antwort: Int(4)

Habs getestet und es klappt.

Michael Michael am 07.07.06 12:54

Quote
Original von nuit
ich denke...diese Rechnung ist einfacher zu knacken, als normale Captchas...


Das ist keine Frage. Allerdings klappt Captchas ohne Maus nicht wirklich und sind manchmal arg unleserlich.
Es geht ja auch darum, den Spamschutz mit geringsmöglichen (auch kognitiven) für normale User zu verbinden.

Analysieren Spam Bots wirklich Bilder? Das klingt wie mit großen Kanonen auf Spatzen geschossen

fish fish am 07.07.06 13:06

hm original aus einer sprot-grudkurs-ex meines bruders:
welche form ähnelt der eines balles am meissten? + # - O

Michael Michael am 07.07.06 13:08

Das erinnert mich an meinen Mathe-LK: Welche geometrischen Formen kennt ihr? Ball

Franky Franky am 07.07.06 13:51

wie wäre es mit geslicten captchers?

fish fish am 07.07.06 14:13

man kann doch mit php bilder zerlegen und dann in html ausgeben lassen...

das kann man ja als "bildersatz" nehmen. oder? also oder einfach ne tabelle mit 1x1px großen tds mit entsprechendem hintergrund.

oder einfach ein ascii auto oder so..

Franky Franky am 07.07.06 18:51

fish..: http://www.drweb.de/webmaster/sichere-formulare-captcha.shtml

BNightSpeeder am 07.07.06 19:00

Sind diese Matrix Captchas "noch" sicher, oder sind die Bots schon so das sie es rauskriegen?

Franky Franky am 07.07.06 19:51

wie wäre es damit?
http://h6p.de/test/csscaptcha.php

Wasili am 07.07.06 20:03

Quote
Original von Franky
wie wäre es damit?
http://h6p.de/test/csscaptcha.php


MIt Textbrowser bekommst du aber was falsches angezeigt... ;)

Franky Franky am 07.07.06 20:12

mhh....textbrowser :P

Michael Michael am 07.07.06 20:24

Diese Matrixanzeige von Zahlen finde ich prima. Vielleicht könnte man auf diese Weise auch Gleichungen darstellen, dann hätte man beide Methoden verbunden. Textbrowser haben natürlich wieder einmal gelitten.

Die CSSCaptcha üebrzeugen mich nicht.

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt