You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-de@httpd.apache.org by Oliver Kullmann <O....@Swansea.ac.uk> on 2002/11/20 21:27:31 UTC

submitting html-forms two times by double-clicking?!

Hallo,

ich habe hier einen Apache-Server laufen, auf dem Studenten Programmier-Aufgaben
einreichen, und diese dann automatisch kontrolliert werden. Ich verwende
hierzu eine Serie von html-Formen zusammen mit cgi-Skripten (in C++).
Ich habe nun von verschiedenen Seiten Widerspruechliches darueber gehoert,
ob es ein "Doppel-Klick"-Problem gibt oder nicht: Wenn ein Student zweimal
hintereinander schnell auf das Submit-Feld klickt, kann es dann passieren,
dass (unbeabsichtigt) die gleiche Form zweimal an den Server geschickt wird?!
Da die Anzahl der Einreichungen begrenzt ist pro Student, habe ich, um solche
Fehler auszuschalten, eine Sperre eingerichtet, so dass zu keinem Zeitpunkt
ein Student (identifiziert durch Studenten-Nummer) mehr als einen Prozess
laufen hat.

Beim Warten des Programm-Systems frage ich mich nun, ob dieses Problem nicht
vielleicht doch ein eingebildetes ist?! Ist es Aufgabe des Browsers, sicherzustellen,
dass wenn man einmal die Submit-Taste betaetigt hat, dass dann die Form inaktiv ist?!?!

In den Buechern, die ich zu html usw. habe, habe ich kein Wort darueber gefunden,
was denn wirklich passiert (bzw. passieren sollte), wenn man eine Form abschickt.

Eine damit verbundene Frage ist, wo ich denn am besten (unter Suse 8.0) die Zeile

RLimitNPROC 1 1

eintrage, die ja wohl obiges Problem in jedem Falle loest. (Ich verstehe dies hoffentlich
richtig, dass damit die Anzahl der Prozesse pro Klient beschraenkt wird?! In "Apache The
Definite Guide" (na ja) heisst es, dass damit die Anzahl der Prozesse pro "user" beschraenkt
wird --- welcher user ist denn damit gemeint?!)

Im allgemeinen traegt man derartige Direktiven wohl in

/etc/httpd/httpd.conf

ein, aber um die automatische Konfiguration von Suse nicht abzuschalten, darf man wohl
diese Datei nicht von Hand konfigurieren. Ist nun die richtige Methode die, in

/etc/sysconfig/apache

eine entsprechende Datei in die (noch leere) Liste

HTTPD_CONF_INCLUDE_FILES=""

einzutragen, wobei diese Datei dann die Zeile

RLimitNPROC 1 1

(plus etwaige andere Direktiven) enthaelt?!?!

Fuer Hinweise waer ich sehr dankbar!

Oliver



Re: submitting html-forms two times by double-clicking?!

Posted by Oliver Kullmann <O....@Swansea.ac.uk>.
On Wed, Nov 20, 2002 at 09:52:57PM +0100, Juergen Unger wrote:
> Mailing-List: contact users-de-help@httpd.apache.org; run by ezmlm
> Precedence: bulk
> list-help: <ma...@httpd.apache.org>
> list-unsubscribe: <ma...@httpd.apache.org>
> list-post: <ma...@httpd.apache.org>
> Reply-To: users-de@httpd.apache.org
> Delivered-To: mailing list users-de@httpd.apache.org
> Delivered-To: moderator for users-de@httpd.apache.org
> Date: Wed, 20 Nov 2002 21:52:57 +0100
> From: Juergen Unger <j....@choin.net>
> To: users-de@httpd.apache.org
> User-Agent: Mutt/1.2.4i
> In-Reply-To: <20...@swan.ac.uk>; from O.Kullmann@Swansea.ac.uk on Wed, Nov 20, 2002 at 08:27:31PM +0000
> X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N
> Subject: Re: submitting html-forms two times by double-clicking?!
> X-Spam-Status: No, hits=-2.4 required=10.0
> 	tests=IN_REP_TO,PLING_QUERY,REFERENCES,SIGNATURE_LONG_SPARSE,
> 	      SPAM_PHRASE_00_01,USER_AGENT,USER_AGENT_MUTT
> 	version=2.43
> X-Spam-Level: 
> 

Hallo Juergen,
vielen Dank!

Was mir nicht ganz klar ist: Die Form wird ja schon von einem
Skript verschickt --- kann man erreichen, das beim Ansprechen
einer URL schon direkt ein cgi-Skript aufgerufen wird (wohl
ohne Eingaben)?! Bei mir laeuft immer alles ueber statische html-
Seiten, so dass ich von dieser Seite erst eine Form aktivieren
wuerde, die dann die richtige "zertifizierte" Form anfordert.

Hab's eben mal ausprobiert, einfach ein cgi-Skript direkt anzuspringen
(ohne Form): Funkioniert ja --- man bekommt
dann eben 0 Information! Gut zu wissen.

Oliver

P.S. Das Atomizitaetsproblem habe ich einfach durch Verwendung
einer Datenbank geloest, die mir Transaktions-Integritaet
sichert.

> Hallo Oliver !
> 
> also das Problem dass ein Form ggf. mehrfach abgeschickt wird
> ist durchaus existierend.  Einfache Massnahme dagegen,
> sowas wie einen Semaphor bauen:
> Jedem Form eine eindeutige ID in einem versteckten Feld
> mitgeben (z.B. md5 hash ueber aktuelle Uhrzeit und pid des
> sendenden Prozesses).   Gleichzeitig diese ID in eine
> Liste eintragen.
> Im Action-Skript des Forms dann pruefen ob die ID noch in der
> Liste vorkommt, wenn ja dann daraus entfernen und weitermachen,
> wenn nein dann Fehlermeldung (Form wurde mehrfach geschickt)
> Nur aufpassen, das Pruefen der Liste und entfernen aus der
> Liste muss moeglichst als atomare Operation vorgenommen werden
> (also File-Locking nicht vergessen).
> 
> Gruss,
>   -Juergen-
> 
> -- 
> -- Unix - Network - Security - Database -- Consulting & Development
> --
> 
> --------------------------------------------------------------------------
>                 Apache HTTP Server Mailing List "users-de" 
>       unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
>            sonstige Anfragen an users-de-help@httpd.apache.org
> --------------------------------------------------------------------------

-- 
Dr. Oliver Kullmann
Computer Science Department
University of Wales Swansea
Faraday Building, Singleton Park
Swansea SA2 8PP, UK
http://cs-svr1.swan.ac.uk/~csoliver/


Re: submitting html-forms two times by double-clicking?!

Posted by Juergen Unger <j....@choin.net>.
Hallo Oliver !

also das Problem dass ein Form ggf. mehrfach abgeschickt wird
ist durchaus existierend.  Einfache Massnahme dagegen,
sowas wie einen Semaphor bauen:
Jedem Form eine eindeutige ID in einem versteckten Feld
mitgeben (z.B. md5 hash ueber aktuelle Uhrzeit und pid des
sendenden Prozesses).   Gleichzeitig diese ID in eine
Liste eintragen.
Im Action-Skript des Forms dann pruefen ob die ID noch in der
Liste vorkommt, wenn ja dann daraus entfernen und weitermachen,
wenn nein dann Fehlermeldung (Form wurde mehrfach geschickt)
Nur aufpassen, das Pruefen der Liste und entfernen aus der
Liste muss moeglichst als atomare Operation vorgenommen werden
(also File-Locking nicht vergessen).

Gruss,
  -Juergen-

-- 
-- Unix - Network - Security - Database -- Consulting & Development
--