SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 20.04.2006, 14:45:05
dicon dicon ist offline
Anfänger
 
Registriert seit: Apr 2006
Beiträge: 1
Mail-Formular - Problem mit uniqid() und mozilla

Hallo Forum...

als silent-reader hab ich mir hier in der Vergangenheit schon die eine oder andere nützliche Info abholen können... allerdings jetzt ein
Problem/Phänomen mit dem ich (einschließlich Suchfunktion) nicht weiter komme.

Aufgabenstellung:
Ich habe ein Mail-Formular gebaut. Um es gegen mail-injection u.ä. ein bischen abzusichern, habe ich neben der Validierung der
eingegebenen Daten eine Funktionalität vorgesehen, die ein mehrfaches Senden der Daten einigermaßen verhindern soll.

Grundaufbau (ich beschränke mich auf die aus meiner Sicht wichtigen Teile des Scripts, wenn da aus Eurer Sicht was fehlen sollte, bitte
Nachsicht üben):
PHP-Code:
3    if (isset($_POST['stage']) && ($_POST['stage'] == 'process'))
4    {
5        val_form();
6    }
7    else
8    {
9        show_form();
...
13    function show_form()
14    {
15        $form_id md5 (uniqid (rand()));
16        echo "    <div id=\"con-box\">\n";
17        echo "        <h1>Eröffnungsdialog via Mail</h1>\n";
18        echo "$form_id";
...    
## Ausgabe $form_id an dieser Stelle nur zur Kontrolle, Erklärung weiter unten
26        echo "        <form action=\"index.php?id=711-1\" method=\"post\">\n";
...
43        echo "        <input name=\"form_id\" type=\"hidden\" value=\"".$form_id."\">\n";
44        echo "        <input name=\"stage\" type=\"hidden\" value=\"process\">\n";
...
55        exit;
56    }
...
59    function val_form()
60    {
61        $data_out = array();
62        $msg_err_anz 0;
63        $dir_tmp "/xampp/htdocs/dc/tmp/";
64        $wHandle fopen ($dir_tmp."form_id_tmp.txt"'r+');
65        $rHandle fopen ($dir_tmp."form_id_tmp.txt"'r');
66        $name $_POST['name'];
67        $firma $_POST['firma'];
68        $e_mail $_POST['e_mail'];
69        $nachricht $_POST['nachricht'];
70        $form_id_post $_POST['form_id'];
...    
## Zeile 80 bis 118 Datenvalidierung
123        if ($msg_err_anz == "0")
124        {
125            $tmp_form_id fgets($rHandle);
126
127            
if ($tmp_form_id == $form_id_post)
128            {
...    
## Formular wurde bereits gesendet, Abbruch
143                fclose ($rHandle);
144                exit;
145            }
146            else
147            {            
148                if (!fwrite($wHandle$form_id_post))
149                {
150                    print "Kann in die Datei $filename nicht schreiben";
151                    exit;
152                }
153                fclose ($wHandle);
154            }
...    
## Formular wurde gesendet
...    ## bei fehlerhaften Eingaben, Ausgabe des Formulars mit Fehlermeldung
195            if (is_array($data_out))
196            {
197                foreach ($data_out as $feld => $msg)
198                {
199                    foreach ($msg as $msg_code => $value)
200                    {
...    
## die ursprüngliche Formular-ID wird mit übergeben
283                echo "        <input name=\"form_id\" type=\"hidden\" value=\"".$form_id_post."\">\n";
...    
## nach dem erneuten "Senden" geht's in Zeile 59 wieder los, solange, bis keine
    ## Fehler mehr enthalten sind und das Mail-Formular richtig gesendet wird. 
Das Problem/Phänomen:

Mit dem IE funktioniert alles bestens, egal, ob reload oder Zurück-Button, das Script erkennt, wenn das Mail-Formular schon einmal
geschickt wurde und gibt die entsprechende Meldung aus - kein erneuter Versand. Dass es beim IE klappt, hat aber erfahrungsgemäß
nicht viel zu bedeuten.


Mozilla 5.0:

In Zeile 18 gebe ich die Formular-ID zur Kontrolle aus. Der angezeite String stimmt nicht mit dem im Quellcode überein - aktuell:
Ausgabe: beaa9370fcaca415cc460ce25fc572c6
Quellcode: aba2bd8694973ec3ab836201441a18f9


Ich fülle nun alle Felder korrekt aus und sende es. Die Fehlerprüfung Zeile 80 bis 118 ergibt 0 - das Formular wird gesendet und die ID
(Ausgabe-ID) temporär gespeichert, Zeile 148 bis 153.

Klicke ich jetzt Reload, ist alles gut: ab Zeile 125 wird geprüft und erkannt, dass das Formular bereits gesendet wurde und ein erneutes
Senden verhindert.

Klicke ich den Zurück-Button, erscheint das ursprüngliche Formular mit den eingegebenen Daten, allerding hat sich die Formular-ID
geändert. Das führt daszu, dass beim erneuten Senden angenommen wird, dass es sich um eine neue Mail handelt - der Versand findet statt.


Erstaunlich:
Fülle ich nach dem ersten Aufruf das Formular n i c h t korrekt aus, bekomme ich es mit den entsprechenden Fehlermeldungen zurück.
Ich korrigiere, sende erneut, drücke den Reload-Button - der Versand wird verhindert, drücke dann den Zurück-Button und sende
erneut - der Versand wird verhindert, schaue mir jeweils die Quellcodes an und stelle fest, dass die ursprüngliche Formular-ID in jedem
Fall korrekt verarbeitet wurde und sich nicht ändert...

Zur Info,
Test-Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; de-AT; rv:1.6) Gecko/20040113, das automatische Speichern von Formulardaten
findet nicht statt.

Bevor ich die Idee mit uniqid() verwerfe und mit Session/SID arbeite, wollte ich sicher sein, dass ich nicht irdendwo eine Dämlchkeit
gebaut habe...

Danke schonmal für Eure Hilfe

dicon
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mail Template Problem pixelartist PHP für Fortgeschrittene und Experten 1 20.10.2004 13:40:25
Formular Problem (session?) dersupergrobi PHP für Fortgeschrittene und Experten 2 25.07.2004 14:27:16
Formular als Html Mail verschicken luckypycho PHP für Fortgeschrittene und Experten 1 17.02.2004 21:23:18
Formular als Html Mail verschicken, Checkbox probleme! luckypycho PHP Grundlagen 0 15.02.2004 18:50:54
update formular problem Silencer PHP für Fortgeschrittene und Experten 1 14.10.2002 08:29:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:29:18 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt