SUCHE MIT Google
Web virtualuniversity.ch
HOME DIDAKTIK ECDL ELEKTRONIK GUIDES HR MANAGEMENT MATHEMATIK SOFTWARE TELEKOM
DIENSTE
Anmeldung
Newsletter abonnieren
Sag's einem Freund!
VirtualUniversity als Startseite
Zu den Favoriten hinzufügen
Feedback Formular
e-Learning für Lehrer
Spenden
Autoren login
KURSE SUCHEN
Kurse veröffentlichen

Suche nach Datum:

Suche mit Schlüsselwort:

Suche nach Land:

Suche nach Kategorie:
PARTNER
ausbildung24.ch - Ausbildungsportal, Seminare, Kursen... 

 
HTMLopen.de - Alles was ein Webmaster braucht

 
PCopen.de - PC LAN Netze und Netzwerke - alles was ein IT Profi und Systemtechnicker braucht

TELEKOM

Fileupload per Perl/CGI

Eine Datei soll über ein Formular und per HTTP auf einen Server geladen werden, da ein FTP-Zugang nicht zur Verfügung steht oder nicht eingesetzt werden soll. Für den Upload wird beim Formular die Codierung multipart/form-data verwendet, die es erlaubt, ein mehrteiligesFormular per POST-Methode zum Server zu senden. Der eine Teil sinddie normalen Formulareingaben, der andere Teil ist der Inhalt der hochgeladenenDatei. Selbst mehrere Dateien können so auf einmal hochgeladen werden.Auf den Server wird zunächst eine temporäre Datei angelegt, die dannvom CGI-Script verarbeitet werden muß. Das Formular hat zwei Eingabefelder,eines zur Auswahl der lokalen Datei und eines zur Angabe des Namens der Datei aufdem Server (letztere könnte auch aus dem Originalnamen abgeleitet oderautomatisch generiert werden):

<HTML><HEAD><TITLE>Upload</TITLE></HEAD><BODY><H1>Datei-Upload</H1><form action="/cgi-bin/upload.pl" method="post" enctype="multipart/form-data">Lokaler Dateiname: <input type="file" name="datei" size=40><BR>Dateiname auf dem Server: <input type="text" name="dateiname" size="40"><BR><input type="Submit" value="Upload"><input type="reset" value="Löschen"></form></BODY></HTML> Betrachtet man sich das Formular mit dem Browser, sieht man einen Button "Browse" neben der ersten Eingabezeile:

Durch den Eingabetyp "file" kann durch Anklicken des Buttons ein Fenster zum Durchsuchen der Platte geöffnet werden wie man es von anderen Windows-Programmen her kennt. Nach Eingabe der Daten und Anklicken des "Submit"-Buttons erfolgt der Upload.

Der folgende Perl-Quellcode enthält ein Beispiel für ein Upload-Script. Die Parameter stellen sowohl ein Filehandle, als auch den Dateinamen der hochgeladenen Datei zur Verfügung. In der while-Schleife wird die Datei in 1024 KByte großen Blöcken eingelesen und in die angegebene Datei geschrieben. Beide sind im Binär-Modus geöffnet, weil nicht bekannt ist, ob die Daten, die ankommen, Binär- oder Text-Daten sind. Zuletzt wird noch eine Bestätigung an den User zurückgegeben, daß die Datei erfolgreich gesichert wurde.

!/usr/bin/perl # Einfaches Script fuer File-Upload use strict; use CGI qw(:standard); # Upload Dir, kein Slash am Ende! my $updir = "/home/httpd/htdocs/upload"; # Referer (mit .htaccess geschuetztes Verzeichnis wo das Formular liegt) my $ref = "http://myhost.tld/upload/upload.html"; my $data; # Lesepuffer ##### BITTE BEACHTEN ###################################################### # Die Felder des Formulars # <form action="/cgi-bin/ups.pl" method="post" enctype="multipart/form-data"> # Lokaler Dateiname: # <input type="file" name="datei" size=40><BR> # Dateiname auf dem Server: # <input name="dateiname" size="40"> # <input type="Submit" value="Upload"> # <input type="reset" value="L&ouml;schen"> # </form> print header; print start_html('Datei-Upload'); if ($ENV{'HTTP_REFERER'} ne $ref) { print "<H1>Fehler!</H1>\n"; print "Es wurde versucht, ohne Erlaubnis hochzuladen! Abbruch..."; print $ENV{'HTTP_REFERER'}; print end_html; exit; } my $datei = param('datei'); my $dateiname = param('dateiname'); if (! $datei or ! $dateiname) { print "<H1>Fehler!</H1>\n"; print "Datei oder Dateiname fehlt! Abbruch..."; print end_html; exit; } if (! open WF, ">$updir/$dateiname") { print "<H1>Fehler!</H1>\n"; print "Datei kann nicht geschrieben werden! Abbruch..."; print end_html; exit; } binmode $datei; binmode WF; while(read $datei,$data,1024) { print WF $data; } close WF; print "<H1>Upload O. K.</H1>\n"; print "Die Datei wurde hochgeladen.<BR>\n"; print "Remote Path and Filename: $updir/$dateiname\n"; print end_html; exit; Dieses Script ist nicht für den praktischen Gebrauch gedacht, es dient lediglich als Beispiel. Sonst müssten die Sicherheits-Vorkehrungen viel strenger sein. Ein Datei-Upload auf den Server bedeutet immer ein Sicherheits-Risiko. Darum muß die Datei auch in einem "harmlosen" Verzeichnis landen, keinesfalls in cgi-bin Auch sollte man die Maximalgröße der Datei begrenzen, sonst fürt das Hochladen riesiger Dateien zu einer Denial-of-Service-Situation. Deshalb sollten von Anfang an einige Sicherheits-Vorkehrungen getroffen werden. Dazu zählen unter anderem:

  • Das Definieren einer maximalen Dateigröße
    Das kann durch Setzen der Variablen $POST_MAX geschehen. Hier wird die Maximal größe in Bytes angegeben, z. B. für ein Maximum von 400 KByte:

    $POST_MAX = 400 * 1024; Übrigens kann man durch Setzen der Variablen DISABLE_UPLOADS auf einen Wert ungleich 0 den Upload komplett unterbinden.
  • Berechtigung für Aufrufer vergeben
    Der Aufruf des Scripts darf nur aus einem durch Paßwort geschützten Verzeichnis erfolgen. Dieser Fall wird im Beispiel abgehandelt. Die Umgebungsvariable HTTP_REFERER enthält die URL der aufrufenden Seite. Wenn jemand versucht, das Script von einer anderen Seite aus aufzurufen, wird er abgewiesen.
  • Die Überprüfung des Dateinamens auf Integrität
    Dies könnte z. B. so aussehen:

    my @extensions = "txt dat gif jpg"; if(param('dateiname') !~ /^[a-z\.\-_]+?\.([a-z]{3})$/) { die("Ungültiger Dateiname"); } else { my $extension = $1; if(!grep($extension,@extensions)) { die("Ungültige Dateiendung"); } } In dem obigen Code-Schnipsel wird ein Array @extensions mit gültigen Datei-Endungen definiert. Dann wird der Dateiname auf Integrität überprüft. Wenn Sonderzeichen, shell pipes oder ähnliches darin vorkommen, so wird das Script mit einer Fehlermeldung beendet.

    Am besten generiert man den serverseitigen Dateinamen im Skript selbst, z. B. aus Referrer, Datum und Uhrzeit.

DIPLOMARBEITEN UND BÜCHER

Diplomarbeiten zum Runterladen:

Suche im Katalog:
Architektur / Raumplanung
Betriebswirtschaft - Funktional
Erziehungswissenschaften
Geowissenschaften
Geschichtswissenschaften
Informatik
Kulturwissenschaften
Medien- und Kommunikationswissenschaften
Medizin
Psychologie
Physik
Rechtswissenschaft
Soziale Arbeit
Sozialwissenschaften


JOBS
HOME | E-LEARNING | SITEMAP | LOGIN AUTOREN | SUPPORT | FAQ | KONTAKT | IMPRESSUM
Virtual University in: Italiano - Français - English - Español
VirtualUniversity, WEB-SET Interactive GmbH, www.web-set.com, 6301 Zug

Partner:   Seminare7.de - PCopen.de - HTMLopen.de - WEB-SET.com - YesMMS.com - Ausbildung24.ch - Manager24.ch - Job und Karriere