deutsche Übersetzung 21.06.2006 (teilweise, bitte vervollständigen)- Habe gerade angefangen zu übersetzen - die unklaren Sachen in English dahinter stehen gelassen Stephan Schwarzbold? 13.10.2006 12:51 Uhr ff. --Die Seite ist auf gar keinen Fall Korrektur gelesen, d.h. wer Rechtschreibfehler und verkorkste Sätze findet darf sie ausbauen und behalten UND NEIN, dies ist keine Aufforderung zum Mitmachen winking smiley

PmWiki enthält ein Modul upload.php, welches dem Benutzer erlaubt, Dateien mit Hilfe eine Webbrowsers auf den Wiki-Server hochzuladen. Hochgeladene Dateien (auch attachments genannt) können leicht mittels Verknüpfungen auf den Wikiseiten angesprochen werden. Diese Seite beschreibt, wie die Upload-Funktion installiert und konfiguriert wird.

Ein paar Hinweise zur Sicherheit !

PmWiki verhält sich weitgehend sehr zurückhaltend, wenn es um das Hochladen von Dateien geht. Selbst nach der Aktivierung der Upload-Funktion sind die Einschränkungen immer noch stärker, als manchmal notwendig (PmWiki takes a somewhat paranoid stance when it comes to the uploads feature. Thus, the default settings for uploads tend to try to restrict the feature as much as possible):

  • Die Upload-Funktion ist standardmäßig deaktiviert
  • Im Falle der Aktivierung ist der Upload standardmäßig mit einem Passwort versehen
  • Bei der Passwortlöschung sind Dateinamen und -endungen eingeschränkt, damit kein Missbrauch entstehen kann (Even if you remove the password, you're restricted to uploading files with certain names and extensions)
  • Die erlaubten Zeichen in Dateinnamen sind: Buchstaben (A-Z, a-z), Ziffern (0-9), Bindestrich (-), Unterstrich(_), Punkt (.) und Leerzeichen (wobei mit Leerzeichen manche Browser so Ihre Probleme haben).
  • Die maximale Uploadgröße ist sehr klein (50K - voreingestellt)

Durch diese Regeln ist das Zerstörungspotential gering, es sei denn der Wiki-Administrator hat die Regeln ausdrücklich gelockert. (This way the potential damage is limited until/unless the wiki administrator explicitly relaxes the restrictions.)

Diese Einschränkungen sind auch gedacht, damit nur lesende (anonyme) Nutzer keinen größeren Schaden auf dem Server anrichten können. (Keep in mind that letting users (anonymously!) upload files to your web server does entail some amount of risk.) Die upload.php ist extra dafür entwickelt worden, um die Gefahren zu verringern (oder: um vor gefährlichen Nutzern zu schützen -- je nachdem wie man jetzt hazard interpretieren will), jedoch stehen so dem wiki administrator alle Möglichkeiten offen, die Upload-Möglichkeiten nach seinen Wünschen anzupasssen. Es sei aber auf die Gefahren hingewiesen, die eine unbedachte oder unvorsichtige Änderung mit sich bringen kann - die Effekte reichen von verwunderlich bis 'saugefährlich'. (The upload.php script has been designed to reduce the hazards, but wiki administrators should be aware that the potential for vulnerabilities exist, and that misconfiguration of the upload utility could lead to unwanted consequences.)

Angemeldete Benutzer werden (dem Dateinamen nach bereits vorhandene) Dateien beim Wiederhochladen unwiederbringlich überschreiben. Um dies zu verhindern muss in die config.php folgende Zeile eingefügt werden:

$EnableUploadOverwrite = 0;

Allerdings kann ein Administrator auch ältere Dateiversionen behalten. Siehe dazu: Versionierung hochgeladener Dateien.

An administrator can also configure PmWiki so the password mechanism controls access to uploaded files.

Grundinstallation

Das upload.php Script wird automatisch in stdconfig.php einbezogen, wenn die $EnableUpload Variable in config.php auf wahr (true) gesetzt ist. Zusätzlich können in config.php die $UploadDir und $UploadUrlFmt Variablen gesetzt werden, um das lokale Verzeichnis, in dem die hochgeladenen Dateien gespeichert werden sollen, und die URL die für den Zugriff benutzt werden können, anzugeben. Per default sind $UploadDir und $UploadUrlFmt so eingestellt, das Uploads in einem Verzeichnis uploads/ innerhalb des aktuellen Verzeichnisses gespeichert werden (gewöhnlich das Verzeichnis, das pmwiki.php enthält). Zusätzlich sollte in config.php ein voreingestelltes Uploadpasswort eingestellt werden (siehe PasswordsAdmin?).

Demnach sieht eine Grundeinstellung in config.php für Uploads wie folgt aus:

<?php if (!defined('PmWiki')) exit();
[-##  Enable uploads and set a site-wide default upload password.-]
## Ermögliche Uploads und setze ein Site-weites Passwort.
$EnableUpload = 1;
$DefaultPasswords['upload'] = crypt('secret');

Wichtig: Lege kein Upload-Verzeichnis an! Siehe nächster Absatz.

Möglicherweise musst du auch das Verzeichnis explizit setzen, dass die hochgeladenen Dateien speichern soll, und einen URL zu diesem Verzeichnis angeben, so wie hier:

$UploadDir = "/home/john/public_html/uploads";
$UploadUrlFmt = "http://www.john.com/~john/uploads";

Uploads können site-übergreifend, gruppen-bezogen oder pro Seite konfiguriert werden, indem $UploadPrefixFmt angepasst wird. Das bestimmt, ob alle Uploads in ein gemeinsames Verzeichnis für die gesamte Site gesetzt wird, in ein individuelles für jede Gruppe oder individuell für jede einzelne Seite. Die Voreinstellung steht auf gruppenweises Speichern.

Für site-weite Uploads, setze

$UploadPrefixFmt = '';

Für seitenweises Speichern benutze eine dieser Einstellungen:

$UploadPrefixFmt = '/$FullName';
$UploadPrefixFmt = '/$Group/$Name';

Das Uploadverzeichnis

Damit die Uploadfunktion sauber arbeitet, muss das durch $UploadDir angegebene Verzeichnis vom Webserverprozess beschrieben werden können, und es muss gewöhnlich an einem Ort liegen, auf den vom Web aus zugegriffen werden kann (z. B. in einem Unterverzeichnis von public_html). Wird PmWiki mit Upload-Rechten ausgeführt, wird ein Satz von Schritten zu Eingabe von Daten, die zur Einrichtung des Upload-Verzeichnisses auf dem Server nötig sind, angeboten (von Server zu Server etwas unterschiedlich). Beachte, dass ggf. Unterverzeichnisse für die Gruppen explizit angelegt werden müssen, für die die passenden Schreibrechte gesetzt sein müssen.

Eine Datei hochladen

Sowie die Uploadfunktion freigeschaltet ist, können Benutzer auf das Upload-Formular zugreifen, indem sie "?action=upload" an das Ende eines normalen PmWiki-URL anfügen. Der Benutzer wird aufgefordert, ein Upload-Passwort einzugeben, entsprechend der übrigen Passwortabfragen (siehe Passwords und PasswordsAdmin? zu Informationen zum Setzen von Passwörtern für Seiten, Gruppen und die komplette Site.)

Eine Alternative wäre, den Markup "Attach:filename.ext" in eine bestehende Seite einzufügen, wibei filename.ext der Name der hochzuladenden Datei ist. Wenn die Seite angezeigt wird, wird ein '?-Link' am Ende des Markups angefügt, die den Autor zur Upload-Seite führt. (Siehe Uploads für weitere Syntaxvarianten.)

Vorgegeben ist die Organisation der hochgeladenen Dateien in einzelnen Unterverzeichnissen für jede Gruppe. Dies kann geändert werden durch anpassen der Variablen $UploadPrefixFmt, siehe Cookbook:UploadGroups für Details.

Versionierung hochgeladener Dateien

PmWiki verwaltet keine Versionen hochgeladener Dateien per Voreinstellung. Dennoch kann ein Administrator durch Setzen der Variablen

in der Datei config.php einstellen, dass ältere Dateien im Upload-Verzeichnis zusammen mit der neuesten Datei gespeichert werden.

Beschränken des Hochladens auf Gruppen oder Seiten

Hochladen kann beschränkt werden auf Gruppen oder Seiten durch Benutzen einer per group customization. Setze einfach $EnableUpload=1; für solche Gruppen oder Seiten, für die das Hochladen erlaubt sein soll; alternativ kannst du auch $EnableUpload=1; in der config.php-Datei setzen und damit zunächst site-weit erlauben und dann in den per-group- oder per-page-Dateien $EnableUpload=0; eintragen, in denen es definitiv verboten sein soll.

Beschränken des Hochladens auf bestimmte Dateitypen und -größen

Das Upload-Skript führt ein paar Verifikationen (Tests) durch, bevor eine Datei gespeichert wird. Die grundsätzlichen Verifikationen werden hier beschrieben.

Dateinamen
Der Name einer hochzuladenden Datei darf nur Buchstaben, Ziffern, Unterstriche, Bindestriche, Leerzeichen und Punkte enthalten. Der Name muss mit einem Buchstaben oder einer Ziffer beginnen und enden.
Dateierweiterungen
Nur Dateien mit zugelassenen Dateierweiterungen wie ".gif", ".jpeg", ".doc", etc. dürfen hochgeladen werden. Dies ist eine lebenswichtige Sicherheit für den Server, sonst könnte ein Benutzer den Server dazu bringen, Dateien mit Endungen wie ".php", ".cgi", etc. auszuführen bzw. besonders zu behandeln.
Dateigrößen
Per Voreinstellung sind alle hochzuladenden Dateien auf 50K Bytes beschränkt, so wie es in der Variablen $UploadMaxSize bestimmt. ist. Um diese Grenze auf 100K zu erhöhen brauchst du nur einen neuen Wert in der config.php-Datei zu setzen:
$UploadMaxSize = 100000;

Die maximale Dateigröße kann auch für jeden Dateityp einzeln angegeben werden. So kann ein Administrator die Größe für ".gif"- und ".jpeg"-Dateien auf 20K, ".doc"-Dateien auf 200K, und alle anderen auf die durch $UploadMaxSize gegebene Größe beschränken. Das $UploadExtSize-Array wird benutzt, um zu bestimmen, welche Dateiendungen gültig sind und wie groß die Dateien sein dürfen. Zum Beispiel:

$UploadExtSize['gif'] = 20000; # begrenze .gif-Dateien auf 20K

Setzen eines Eintrags auf Null verhindert das Hochladen einer Datei solchen Typs insgesamt:

$UploadExtSize['zip'] = 0; # verhindere .zip-Dateien

Hinzufügen neuer Dateitypen zu den erlaubten Typen

Um eine neue Dateierweiterung zu der Liste der erlaubten Typen hinzuzufügen, füge eine neue Zeile wie die folgende in eine local customization-Datei hinzu:

$UploadExts['ext'] = 'content-type';

wobei ext die Dateierweiterung und content-type ein Dateityp (MIME type) ist, der mit Dateien mit dieser Erweiterung verknüpft werden soll. Um zum Beispiel die Erweiterung 'dxf' hinzuzufügen mit dem Dateityp 'image/x-dxf', setze in die Datei die Zeile

$UploadExts['dxf'] = 'image/x-dxf';

Jeder Eintrag in $UploadExts muss ein Paar aus der Erweiterung und dem damit verbundenen Mime-Typ sein:

$UploadExts = array(
  'gif' => 'image/gif',
  'jpeg' => 'image/jpeg',
  'jpg' => 'image/jpeg',
  'png' => 'image/png',
  'xxx' => 'yyyy/zzz'
)

Für die Dateitypen, die PmWiki schon bekannt sind, ist deren Wiederholung hier nicht nötig (das upload.php-Skript fügt PmWikis Vorgaben zu denen hinzu, die der Administrator hier angibt).

Andere Dateigrößengrenzen

Es gibt weitere Faktoren, die die Dateigrößen beeinflussen. In Apache 2.0 gibt es eine LimitRequestBody-Direktive, die die Maximalgröße von Allem, was irgendwie "gepostet" wird (einschließlich der Uploads), kontrolliert. Die Vorgabe in Apache setzt dies auf 'unbegrenzt'. Dennoch begrenzen manche Distributionen (z. B. Red Hat 8./9.0) die Größe auf 512K, so dass diese Einstellung ggf. zu ändern (zu erhöhen) ist. (Normalerweise stehen solche Einstellungen in der httpd.conf-Konfigurationsdatei oder in einer Datei im /etc/httpd/conf.d-Verzeichnis.)

Es wurde ein Problem berichtet mit Red Hat 8.0/9.0 mit Apache 2.0.x, wo der Fehler "Requested content-length of 670955 is larger than the configured limit of 524288" unter Apache auftritt und ein "Page not found" im Browser erscheint. Die obigen Einstellungen ändern daran auch nichts. Aber in Red Hat 8.0/9.0 gibt es eine zusätzliche PHP-Konfigurationsdatei, /etc/httpd/conf.d/php.conf, und ein heraufsetzen der Zahl in "LimitRequestBody 524288" löst das Problem.

PHP selbst hat zwei Grenzen bezüglich hochzuladender Dateien (gewöhnlich in /etc/php.ini). Die erste ist der upload_max_filesize-Parameter, der per Voreinstellung auf 2M gesetzt ist. Die zweite ist post_max_size, welche per Voreinstellung auf 6M gesetzt ist.

Mit den Variablen an ihren Stellen -- PmWikis maximaler Dateigröße, Apaches request-size-Grenzen und den PHP-Dateigrößengrenzen -- ist die maximale Dateigröße die geringste Größe dieser drei Variablen.

Durch ein Passwort geschützte hochgeladene Dateien

Das Setzen eines Lesepassworts für Seiten (und Gruppen) verhindert, dass eine angehängte Datei gesehen wird oder das man über diese Seite darauf zugreifen kann. Um aber direkten Zugriff auf den Speicherort der Datei (das uploads/-Verzeichnis) zu verhindern, kann man das folgende tun:

  • In local/config.php setze $EnableDirectDownload=0;
  • Verweigere öffentlichen Zugriff auf das uploads/-Verzeichnis, indem du es aus dem html/- oder public_html/-Verzeichnisbaum heraus verschiebst oder durch eine .htaccess-Datei.

Siehe Cookbook:SecureAttachments.

Weitere Bemerkungen

  • Wenn Hochladen nicht zu funktionieren scheint, versichere dich, dass deine PHP-Installation Hochladen erlaubt. Die php.ini-Datei (gewöhnlich /etc/php.ini oder /usr/local/lib/php.ini) sollte folgende Zeile enthalten:
file_uploads = On

Beachte, dass httpd neu gestartet werden muss, wenn du diesen Wert änderst. Ein anderer Weg zu prüfen, ob Hochladen auf den Server erlaubt ist, ist $EnableDiag auf 1 zu setzen in config.php und ?action=phpinfo an einen URL anzufügen. Die "file_uploads"-Variable muss den Wert 1 haben (wenn es heißt "no value", bedeutet das 'off').

<< Administration der Passwörter? | DocumentationIndex | Internationalisierungen >>

Wie verhindere ich das Hochladen eines gewissen Dateityps?

Hier ist ein Beispiel, was in deiner local/config.php-Datei ergänzt werden muss, um Hochladen von .zip-Dateien zu verhindern:

$UploadExtSize['zip'] = 0; # Disallow uploading .zip files.

0 Kommentare (zeigen/schreiben)