2010-11-18 6 views
1

Symfony uploadet standardmäßig die Datei file to web/upload, so dass sie für jeden zugänglich ist. Ich muss Benutzeranmeldeinformationen bei jeder Anfrage an eine Datei überprüfen. Wie soll ich das machen?Sichere Dateiverwaltung mit Symfony

Antwort

5

Verschieben Sie Ihre Uploads außerhalb Ihres Webroot, wie in/data/uploads. In diesem Fall müssen Sie diese Datei in Project setzen:

sfConfig::set('sf_upload_dir' => sfConfig::get("sf_data_dir") . DIRECTORY_SEPARATOR . 'uploads'); 

Vorausgesetzt, dass Sie immer sf_upload_dir verwendet, um die Upload-Ordner angeben, werden alle Ihre Dateien werden dort bekommen gespeichert.

Der zweite Teil der Lösung braucht eine neue Aktion, die einen Dateinamen überprüft wird, ob der Benutzer Zugriff hat, und kehrt:

  • entweder ein 403-Fehler
  • oder die Dateiinhalte über readfile(), nachdem die richtigen Content-Type- und Content-Length-Header festgelegt wurden.
+0

Wie kann ich ReadFile() in symfony richtig aufrufen? – Dziamid

+0

Sie nennen es wie jede andere Funktion - es gibt keine "Symfony" -Methode dafür. – Maerlyn

+0

Ich meine, es schreibt direkt in den Ausgabepuffer, wenn Sie es einfach in Aktion aufrufen - dann wäre symfony nicht in der Lage, Header korrekt auszugeben. Muss ich die Ausgabe mit ob_start() abfangen und an $ this-> getResponse() -> setContent() übergeben? – Dziamid