Prob mit Sicherheitscode
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
angreifer
anweisung
beitrag
bild
bildchen
break
buchstabe
eintrag
fehler
funktion
gesetzt hast
image
kleinschreibung
luecke
manual
maschine
mensch
mglichkeit
sinnen
variable
-
ich hab ein problem mit dem sicherheitscode von meinem gästebuch (ich denke jeder weiß was ich mit sicherheitscode meine: ein zufälliges bild mit buchstaben drauf wird angezeigt und man muss die buchstaben oder auch zahlen abtippen um einen eintrag zu machen [zum schutz gegen automatisierte einträge])
also ich hab das so gemacht:
... if (!($code == $richtigercode) OR empty($code)) { $fehler .= "<br>•Der Sicherheitscode ist falsch, achte auch auf die Groß- und Kleinschreibung!"; } ... srand(microtime()*1000000); $code = rand(1,7); switch ($code) { case 1: echo "<img src=\"http://scrawl.lima-city.de/guestbook/code1.jpg\">"; $richtigercode = "FEHD"; break; case 2: echo "<img src=\"http://scrawl.lima-city.de/guestbook/code2.jpg\">"; $richtigercode = "7ELP"; break; case 3: echo "<img src=\"http://scrawl.lima-city.de/guestbook/code3.jpg\">"; $richtigercode = "U64D"; break; case 4: echo "<img src=\"http://scrawl.lima-city.de/guestbook/code4.jpg\">"; $richtigercode = "74HN"; break; case 5: echo "<img src=\"http://scrawl.lima-city.de/guestbook/code5.jpg\">"; $richtigercode = "3JS6"; break; case 6: echo "<img src=\"http://scrawl.lima-city.de/guestbook/code6.jpg\">"; $richtigercode = "6L3N"; break; case 7: echo "<img src=\"http://scrawl.lima-city.de/guestbook/code1.jpg\">"; $richtigercode = "2MX8"; break; } ... // und das is jetzt klar: <input name="code" size="6" maxlength="4">
dummerweise bekomme ich aber immer die meldung, der code sei falsch, auch wenn ich den richtigen code eingebe!
oder gäbe es da vielleicht noch eine ganz andere, elegantere lösung?
Beitrag geändert: 6.6.2007 18:22:45 von scrawl -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also du musst die variable $richtigercode schon irgendwie übergeben
zuden würde ich diesen Therm sicherheitshalber noch anderst formulieren
if (!($code == $richtigercode) OR empty($code))
eher So:
if (($code != $richtigercode) OR empty($code))
Eleganter geht es wenn du wirklich zufällige Zahlen und Buchstaben nimmst und die über die gd Bibliotek Dynamisch in eine Grafik einfügen lässt.
Beitrag geändert: 6.6.2007 18:30:01 von keiax -
Also du musst die variable $richtigercode schon irgendwie übergeben
zuden würde ich diesen Therm sicherheitshalber noch anderst formulieren
if (!($code == $richtigercode) OR empty($code))
eher So:
if (($code != $richtigercode) OR empty($code))
achso, dann hat warscheinlich das ausrufezeichen beide bedingungen der OR-verknüpfung negiert!
edit: anscheinend doch nicht, hab es geändert und es klappt immer noch nicht
und die variable $richtigercode wurde ja durch die switch-anweisung übergeben, oder darf man da pro case nur 1 aktion hinschreiben?
Beitrag geändert: 6.6.2007 18:35:54 von scrawl -
Mal ehrlich: Was bringt das? Gar nichts.
1. Wieso glaubst du, sollte sich jemand die mühe machen, dein GB automatisch Vollspammen zu lassen?
2. Hast du den Sinn von dem ganzen Begriffen? In einem guten GB werden diese Bilder automatisch erzeugt und sind desshalb für ein fremdes Programm fast nicht auslesbar (nicht unmöglich). Gibt einen Namen dafür, aber der fällt mir gerade nicht ein. Wenn schon jemand dein GB automatisch Vollspammen lassen würde, müsste das Programm nur noch den Link zum Bild auslesen und weiss dann den richtigen Code.
3. Das nerft nur die Leute, die wirklich etwas schreiben wollen.
4. Mach doch ne IP-Sperre (oder ein Plätzchen, wenn du Hunger hast) das die Anzahl Einträge pro tag beschränkt. Ok, kann man umgehen, aber sogar die ""richtigen"" Code-Bildchen (der name liegt mir auf der zunge) kann man umgehen. Aber irgendwann ist der Aufwand zu gross, da geht man lieber auf eine andere Seite und sucht dort ein paar Sicherheitslücken. -
Diese Code Bildchen heißen auch Capchas! Es gibt aber auch vorgefertigte Scripte für eine Captcha überprüfung!
-
so @ nigolaz: es gibt immer Leute die das in
kleinen Schritten machen und das macht meiner
meinung nach viel (!!) Sinn! Da es dann leichter
zu verstehen ist. Und warum er es macht ist
eindeutig nicht deine Sache!
@ code:
also ähm ich würde die switch() über der
if machen weil er ja sonst die variablen
nicht weiß. und dann musst natürlich den
eingegebenen Wert per $_POST übergeben aber
das wirst du eh wisssen da du eine GB hast
-> weitere Fragen -> ICQ -
also ähm ich würde die switch() über der
if machen weil er ja sonst die variablen
nicht weiß.
naja icq
und dann musst natürlich den
eingegebenen Wert per $_POST übergeben
bei mir funzt es auch immer ohne $_POST['variable'] -
bei mir funzt es auch immer ohne $_POST['variable']
hmm ... dann hast das auf einem Server drauf
wo global_vars on ist in der php.ini . Ist trotzdem
nicht fein programmiert weil das eine riesen
system-fehler-lücke ist.
und zu dem switch-
vorher hast du die $richtigercode abgefragt
bevor du sie überhaupt gesetzt hast! Außerdem .
musst du den richtigen Code per session/cookie/
hidden-feld mit geben sonst weiß das Programm
mit den $_POST daten nicht welcher der richtige
Code vom letzten mal war. da wenn die $_POST vars
abgesendet werden reoloaded wird! -
bei mir funzt es auch immer ohne $_POST['variable']
hmm ... dann hast das auf einem Server drauf
wo global_vars on ist in der php.ini . Ist trotzdem
nicht fein programmiert weil das eine riesen
system-fehler-lücke ist.
Nicht nur schlecht programmiert (Da nicht portabel) sondern auch eine lücke im schlecht konfigurierten PHP-Server
Ich würde übrigends überlegen nur den MD5 Hash der richtigen Zahl zu übergeben ... da auch Post variablen ausgelesen und manipuliert werden können.
So kann ein etwaiger bot aber nur seine eigen eingabe, nicht aber die generierte Zufallszahl in der POST Anweisung im klahrtext sehen (klahr geht dass auch noch zu knacken, aber dazu muss dann schon ein Mensch drann sitzen der erkennt dass es sich um so einen Trick handelt.
Andere Möglichkeit, sind IP und Wort Filter.
Lege dir eine Blacklist von Wörtern an, die in deinem GB nichts zu suchen haben ... und dann eine Zeitblockierung die nur z.B. nur 3 Posts innerhalb von 10 min oder 30 min erlaubt. -
moin,
echo '<img src=\'http://scrawl.lima-city.de/guestbook/code1.jpg\'>';
Warum nicht einfach src=""? Und warum ein absoluter Link, /guestbook/code1.jpg oder sogar code1.jpg reicht doch.
Zum Captcha (so heißen solche die): wie sirseven ja schon gesagt hat: Du fragst die Variable $richtigercode ab bevor du sie gesetzt hast. Errechne (zb mit md5($richtigercode. "irgendeingeheimertext") einen Kontrollwert, den du dem Client mitgibst und hinterher guckst, ob du mit dem eingegebenen Text auf den gleichen Wert kommst.
Zu $code vs $_POST['code']: Lies mal bitte http://php.net/register_globals (wenn du einigermaßen englisch kannst, nimm die englische Version, die Übersetzung ist sehr schlecht) (und verwende danach nur noch die $_(GET|POST|REQUEST)-Variablen)
grüße, maix -
Hmm also ich finde es schön, dass du versuchst, so ein captcha nachzubilden.
Allerdings ist die Programmierung nicht die Beste
Mal so gefragt... was möchtest du erreichen?
Das Menschen es schwerer haben oder dass keine Einträge von Maschinen gemacht werden können?
Wenn du es den Menschen schwerer machen möchtest ist der Code soweit ok, doch für Maschinen nicht ausreichend.
Um dir dies zu verdeutlichen ein paar Überlegungen...
Was kann eine Maschine und was erkennt eine Maschine?
...Nun als erstes schaut eine Mschine nicht so wie ein Mensch auf die Internetseite... die Maschine kann nur den Quellcode auslesen.
Bei deinem Script ist es derzeit so, dass im Quellcode steht: "<img src=.../code1.jpg >" Was macht also der Angreifer?...er füttert seine Maschine mit der Regel ("Wenn code1.jpg gefunden dann tippe FEHD") usw.
Wenn er damit fertig ist, kann er wunderschön spamen.
Wie kann man das verhindern?
Indem man die Grafik dynamisch erzeugt ...PHP liefert die Funktionen gleich mit (siehe http://de.php.net/manual/de/ref.image.php )
Dann hat man immer den gleichen Dateinamen und der Angreifer weiß nicht durch den Quellcode was auf dem Bild ist.
Aber auch wenn man die Grafik nun dynamisch erstellt ist man nicht sicher... mittlerweile kann man diese Captchas analysieren und erhält so den Code.
Eine gute Seite dazu ist http://sam.zoy.org/pwntcha/
Ansonsten viel Erfolg.
Denn nur wenn man selbst programmiert lernt man
-
Danke für die Antworten ;)
Warum nicht einfach src=''? Und warum ein absoluter Link, /guestbook/code1.jpg oder sogar code1.jpg reicht doch.
da ich das teil über guestbook/guestbook.php teste, es später aber in den index include ;)
... die ganzen erklärungen davor
und verwende danach nur noch die $_(GET|POST|REQUEST)-Variablen
jo, mach ich jetzt mittlerweile ;)
Wie kann man das verhindern?
Indem man die Grafik dynamisch erzeugt ...PHP liefert die Funktionen gleich mit (siehe http://de.php.net/manual/de/ref.image.php )
jo, ich hab auch nen buch da schlage ich mal nach -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage