Dieser Script stellt ein Bild mit einem Sicherheitscode dar.
Damit ein Spambot nicht tausend mal ein Formular absendet, verwendet man bei Formularen oft einen 'Sicherheitscode'.
Dies ist eine Grafik mit einem Text/Code, den der User dann in ein Formularfeld eingeben muss.
Der Server überprüft dann nach dem Absenden ob der Sicherheitscode korekt war.
Dies kann man eigentlich relativ einfach in PHP realisieren.
Hier wird ein sechs Zeichen langer Sicherheitscode verwendet.
Zuerst brauchen wir wieder die Funktion für ein zufälligen String:
<form ....>
<!-- Hier das Bild mit dem Sicherheitscode -->
<img src="scode.php?<?php echo time(); ?>&<?php echo strip_tags(SID); ?>" alt="Sicherheitscode">
<input type="text" name="scode" maxlength="6">
Hier wird zuerst in die Session scode unser zufälliger Sicherheitscode gespeichert.
Danach wird das Bild scode.php ausgegeben, und als GET Variable wird die Zeit angehängt.
Dies verhindert, dass das Bild aus dem Browser-Cache geladen wird.
Zum Schluss ist dort noch ein Eingabefeld für den Sicherheitscode.
Jetzt kommen wir zu der Seite, die die Eingabe, und somit den Sicherheitscode überprüft.
Diese ist in etwas so aufgebaut:
//Wichtig: Sicherheitscode in der Session überschreiben
$_SESSION['scode'] = rand_string(6);
if($scode_form == $scode_ses)
//Sicherheitscode ist richtig, Daten werden gespeichert
else
//Falschen Sicherheitscode angegeben
?>
Hier werden die beiden Sicherheitscodes, also der aus der Session und der aus dem Eingabefeld, überprüft.
Wenn diese identisch sind, dann werden die Daten gespeichert.
Ganz wichtig ist, dass der Sicherheitscode in der Session zufällig überschrieben wird, egal ob der Code jetzt richtig oder falsch war.
So jetzt kommen wir zu dem letzten, und wichtigstem Script.
Dieser Script stellt den Sicherheitscode als Grafik dar.
ich habe keine grosse Ahnung von PHP und anderen Programmierungen, ich gestalte meine website sehr einfach!
Aber seit einiger Zeit habe ich immer wieder Spam Einträge in meinem Gästebuch, da habe ich dieses Script gefunden. Kann ich das einfach so ins Script von meinem GB kopieren? Wo sollte das hin? (sorry, habe wirklich nicht viel Ahnung!!;-))
Also der Sicherheitscode funktioniert im IE und Netscape ausgezeichnet. Die Spamflut hat schlagartig nachgelassen. Frage1
Aber: seit die Scripte nicht mehr im Server-Root z.B.: (www.usw.de/formular.php)sondern in einem Ordner liegen, wird beim Aufruf des Kontaktformulares das Sicherheitsfeld nicht mehr korrekt angezeigt. Es wird eine "Grafikleiche" (hoffe das versteht jeder)angezeigt.
Erst nach einer Aktualisierung der Seite (Symbol oder Drücken von F5) wird das Kontrollfeld richtig angezeigt. Der Formularbenutzer weiss ja nun aber nicht was ich weiss?!
Gibt es dazu möglichweise Erfahrungen?
Frage2
Vorgenanntes Formular beinhaltet in meinem Fall ein Feld (Updatefunktion) welches aus einer DB ausgelesen wird. Der Formularbenutzer gelangt über den Link in einer externen e-Mail zu der Formularseite mit besagtem Kontrollfeld.
also in der Art:
<a href="http://www.xyz/index.php?was=formular&id=10">Zum Formular</a>
Es wird also die Datensatz-ID mit übergeben.
Das (ausgefüllte)Updatefeld wird nach Eingabe der richtigen Zeichen aus dem Kontrollfeld in der DB gespeichert.
Nun kommt mein Problem
Das Kontrollfeld wird ja über Session gesteuert.
Der Besucher muss nicht unbedingt sofort das Formular ausfüllen. Er kann und soll noch mehrere andere Seiten besuchen.
Wenn er sich dann irgendwann entschließt das Formular auzufüllen, folgt beim Submit:
Mysql Error ... kann Datensatz nicht finden.
Logisch, denn die Datensatz-ID ist im "Nirwana"
Gibt es eine Lösung die Datensatz-ID trotz oder gerade wegen der $_SESSION['scode'] durch alle anderen (php-Seiten) zu "schleifen" ?
Um die Neugier nicht zu strapazieren, es geht hier um mein Job-Online-Bewerbungssystem. Und die anderen "geschleiften Seiten" sind Lebenslauf usw.
Ich hoffe, dass meine Fragen verständlich gestellt wurden.
index.php ist nach folgendem Schema aufgebaut
<?php
// hostname= www.deinedomain.xx
if(empty($_GET['was']) || !file_exists($_GET['was'].".php") || $_SERVER["HTTP_HOST"]!="www.deinedomain.toplevel")
{
$_GET['was']="standardseite"; // Bei fehlerhaftem URL diese Seite anzeigen
}
include("header.php"); // Meta, css etc
include($_GET['was'].".php"); // Hier Ausgabe der include
include ("footer.php");
?>
Würde mich über konstruktive Hilfe freuen
Post wurde schon 7x editiert, das letzte mal am 11.04.2006 um 09:58 von taute
wohin kommt dieser Code denn?
Ich habe eine PHP-Datei die über das form angesteuert wird (mit mailto und Abfrage der Formularfelder, eine htm-Datei und eine scode.php
Aber: seit die Scripte nicht mehr im Server-Root z.B.: (www.usw.de/formular.php)sondern in einem Ordner liegen, wird beim Aufruf des Kontaktformulares das Sicherheitsfeld nicht mehr korrekt angezeigt. Es wird eine "Grafikleiche" (hoffe das versteht jeder)angezeigt.
Erst nach einer Aktualisierung der Seite (Symbol oder Drücken von F5) wird das Kontrollfeld richtig angezeigt. Der Formularbenutzer weiss ja nun aber nicht was ich weiss?!
Gibt es dazu möglichweise Erfahrungen?
Dieses Problem hatte ich auch. Mein Problem hatte jedoch nichts mit dem Verzeichnis zu tun. Das Problem war einfach, dass ich die Funktion rand_string($lng) vor dessen Definition aufgerufen hab. Als ich "$_SESSION['scode'] = rand_string(6);" nach "function rand_string($lng)..." gesetzt hatte, hatte ich das Problem nicht mehr.
bei mir funktioniert die überprüfung des scriptes irgendwie garnich ich hab schon alles ausprobiert.. könnte den code vllt mal jemand fertig zum download als zip anbieten so wie das bei den anderen schnipseln auch ist?
24.07.2006, 11:25
Sturm
Mitglied
Anfänger
Dabei seit: 07.07.2006
Herkunft: keine Angabe
Posts: 34
wäre keine schlechte Idee
Ich hab ausch ein Problem und zwar wen ich mein eintragen.php aufrufe kommt nur das: <html><body></body></html>
Mehr nicht wie kan ich den Fehler beheben?
geht das jetzt mit dem quellcode als zip oder geht das nicht? wie ich sehe bin ich ja nicht der einzige mit diesem problem und ich bräuchte es echt dringend...
mfg
ps: es funktioniert manchaml aber nicht immer lol
12.08.2006, 01:36
fireman
Mitglied
Guter User
Dabei seit: 23.06.2005
Herkunft: Nürnberg
Posts: 400
Fatal error: Call to undefined function: rand_string() in C:\Programme\xampp\htdocs\lille\index.php on line 3
dies bei dieser zeile:
$_SESSION['scode'] = rand_string(6);
was stimmt daran nicht?...
EDIT: entschuldigung, hat sich erledigt, hab vergessen die funktion in den quelltext zu schreiben^^
Wenn du im Leben etwas erreichen willst,
wenn du gewinnen willst, dann höre auf dein Herz
und wenn dein Herz einmal nicht antwortet,
dann schließe deine Augen und denke an deine Eltern,
so wirst du keine Angst mehr haben und alle Hindernisse überwinden,
dann kannst du alles erreichen, einfach alles!
Post wurde schon 1x editiert, das letzte mal am 12.11.2006 um 14:35 von fireman
Hallo, da muss ich meinem Vorgänger recht geben diese Seite ist ja gedacht um PHP zu lernen und in den letzetn Script war auch unten eine zusammenfassung an PHP Script was alles zusammen in eine Seite muss.
Oder man erklärt unten kurz was man wie jetzt in welche seite schreiben musss und warum...
einziges problem momentan ist nur das ie und opera das bild als leiche anzeigen, wird sich aber schon eine loesung finden, mit gecko engine laeufts einwandfrei, danke nochmal (: