Schutz von Dateien

rethus

Erfahrenes Mitglied
Ich möchte gerne Dateien vor Zugriff von aussen schützen. Sagen wir mal im Verzeichnis domainname.de/upload/
Allerdings sollte der Zugriff von meiner Webseite (php-applikation) möglich sein.
Wie könnte man das einfach machen?

Ich hab schon etwas mit HTTP_REFFERER rumprobiert, aber bin da zu keinem Ergebnis gekommen.
F
Freue mich auf Eure Tipps und Anregungen
 
Warum ist es wichtig um welche Daten es sich handelt? Is doch im Grunde egal. Sind halt unterschiedliche Dateiformate.
 
Der HTTP_REFERER ist eigentlich sinnlos, da der nicht immer mitgeschickt wird oder man ihn auch leicht verändern kann.

Ich würde einen .htaccess-Schutz in das Verzeichnis legen. Wenn das mit den Benutzernamenvergabe und Passtwortvergabe zu kompliziert ist, dann kannst du auch per PHP-Skript die Daten intern auslesen und ausgeben (Stück für Stück!).
 
Zu schwer ist nicht die Sache, setzte ja den normalen htpasswd schutz auch auf vielen anderen Seiten ein. Es geht eher darum, dass man nicht 2 Passwörter eingeben muss.
Die Dateien sollen in meiner Passwortgeschützten PHP anwendung anklickbar und darstellbar sein, nicht aber, wenn man die Dateien von ausserhalb der Anwendung (z.B. über einen Browserlink) abrufen möchte.

Was meinst du mit intern auslesen via PHP-Skript?
 
Warum ist es wichtig um welche Daten es sich handelt? Is doch im Grunde egal. Sind halt unterschiedliche Dateiformate.

Nein ist nicht egal, je nach Dateiformat gibt es unterschiedliche Arten des Schutzes mit entsprechender Effektivität.
Z.B. kannst du in php Daten folgende Zeile definieren das den Quereinstieg absichert.
PHP:
defined('CHECK') or die('Access denied!');

Das geht aber nur bei PHP Daten. Bei kleinen Daten könnte man es sogar in Erwägung ziehen sie mit in der Datenbank zu speichern. Wichtige Daten würde ich erst gar nicht Web Verzeichnis speichern.

Und dann gibts noch eine Menge mehr an Möglichkeiten, es kommt immer auf den Anwendungsfall an, deshalb die Frage. Was für Daten und zu welchem Zweck.
 
Du könntest in einer PHP eine SESSION starten und diese in einer einer zweiten PHP auf Inhalt und Wert überprüfen, und so die gewünschte Zieldatei mit der zweiten PHP anzeigen/downloaden lassen, oder eben nicht.
 
Was meinst du mit intern auslesen via PHP-Skript?

Du liest einfach die Datei per [phpf]fread[/phpf] Stück für Stück aus und gibst den Inhalt aus.
Ich hatte sowas erst neulich schnell (daher vllt. nicht ganz elegant) geschrieben:
(Nicht wundern über die 1. und 39. Zeile, es war eine Joomla-Komponente!)
PHP:
if (!$user->guest)
{
  $fileToDownload = $_GET['file'];
    
  $contentTypes = array(".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
    
  # parse_url() verhindert Angabe von einem anderen Server
  if (file_exists($fileToDownload) && @parse_url($fileToDownload, PHP_URL_HOST) == NULL)
  {
    $fileEnding = substr($fileToDownload, strrpos($fileToDownload, "."));
    
    $fileName = "";
    {
      $posOfSlash = strrpos($fileToDownload, "/");
      if ($posOfSlash===false)
      {
        $fileName = $fileToDownload;
      }
      else
      {
        $fileName = substr($fileToDownload, $posOfSlash+1);
      }
    }
    if (array_key_exists($fileEnding, $contentTypes))
    {
      header("Content-type: application/octet-stream");
    }
    else
    {
      header("Content-type: application/octet-stream");
    }
    header("Content-Length: ".filesize($fileToDownload));
    header("Content-Disposition: attachment; filename=\"".$fileName. "\"");
    $fileHandle = fopen($fileToDownload, "r");
   while (!feof($fileHandle))
    {
      echo fread($fileHandle, 1024);
    }
    fclose($fileHandle);
    $app->close();
  }
      
}
 
Zuletzt bearbeitet:
Danke für die Rückmeldungen.
@Napofis: Alle möglichen Datein.. zum anzeigen, bzw. Download.


Also geht kein Weg daran vorbei, zuerst einen Wrapper zu schreiben, welcher die Datei einliesßt, dann den header setzt und diese als Stream an den Browser ausgibt... und zusätzlich das Gesamte Verzeichnis mit "Deny from all" abzuriegeln?

Gibt es da schon fertige Wrapper-Klassen um Dateien auszulesen?
 
Zuletzt bearbeitet:
Das ist zumindest der einfachste und unkomplizierteste Weg.

Ich denke schon, dass es dafür fertige Skripte gibt, allerdings ist das wirklich einfach und man könnte es auch schnell selber schreiben. Aber geben wird es die natürlich auch.
 
Zurück