[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Dokument im Medienpool mit PW-Schutz - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Anne
Beiträge: 36
Registriert: 13. Feb 2009, 13:16

Dokument im Medienpool mit PW-Schutz

17. Dez 2009, 12:22

Hallo!

Ich habe für einen passwortgeschützten Bereich das 3teilige Login-Modul (http://www.redaxo.de/165-0-moduldetails ... ule_id=328) eingebaut, funktioniert auch prima!

Nun stehe ich vor dem Problem, dass die im internen Bereich verlinkten pdf-Dokumente ebenfalls geschützt werden sollen. Die Anleitung unter http://wiki.redaxo.de/index.php?n=R3.Dokuschutz habe ich gefunden.

Teil 1 funktioniert: mit einer .htaccess-Datei im files-Ordner schütze ich alle pdf-Dateien, die "intern_...pdf" heißen und verlinke mit RewriteRule auf die Startseite.

Den zweiten Teil habe ich nicht hinbekommen und - ehrlich gesagt - auch nicht verstanden.

Wenn ich es richtig verstehe, muss ich einen Artikel anlegen und dort mit einem Modul den angegebenen Quellcode einstellen. Habe also den Code in die Modulausgabe geschrieben und wenn ich "Block hinzufügen" anklicke, fragt mein Browser, ob ich die Datei öffnen oder speichern möchte und zeigt mir dann die unformatierte Artikelseite an. Wie bekomme ich also den Code in einen Artikel?

Und dann soll man wohl ein Modul schreiben, mit dem pdf-Dokumente hochgeladen und über den soeben angelegten Artikel durchgeparst werden können. So weit bin ich noch gar nicht gekommen...

Hat schon einmal jemand diesen Passwortschutz für Dokumente installiert und kann mir die Anleitung etwas näher erläutern? Oder gibt es noch eine andere Methode, um Dokumente im Medienpool zu schützen?

Für jeden Hinweis wäre ich sehr dankbar!

Viele Grüße

Anne
Zuletzt geändert von Ruediger.Nitzsche am 4. Feb 2011, 12:02, insgesamt 2-mal geändert.
Grund: Thread war als gelöst markiert, was aber so nicht wirklich stimmt

dag
Beiträge: 369
Registriert: 24. Aug 2004, 22:11
Wohnort: Dortmund
Kontaktdaten: Website

19. Dez 2009, 20:02

Hallo Anne,

du kannst folgendermaßen vorgehen:
1. htaccess-Datei anlegen,
wie hier http://wiki.redaxo.de/index.php?n=R3.Dokuschutz beschrieben.
Es muß auch eine Datei leer.gif geben, die alternativ zum PDF angezeigt wird.

2. Im Redaxo-Backend ein Template erstellen, das nur den PHP-Code enthält, der in dem Wiki-Text angegeben ist.

Code: Alles auswählen

<?php
$file_name = $_REQUEST["filename"];
$file_path = $REX['INCLUDE_PATH'].'/../../files/'.$file_name;

if ($fp = fopen ($file_path, "r"))
{

  $file_type = "application/octetstream";
  header("Expires: Mon, 2 Jan 2001 05:00:00 GMT"); // Date in the past
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");// always modified
  header("Cache-Control: no-store, no-cache, must-revalidate");// HTTP/1.1
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
  header('Content-Type: '.$file_type.'; name="'.$file_name.'"');
  header('Content-Disposition: attachment; filename="'.$file_name.'"');

  fpassthru ($fp);
  fclose($fp);
}
?>
3. Einen Artikel im internen Bereich anlegen, dem dieses Template zugewiesen wird. Hier wird das ausgewählte PDF dann angezeigt bzw. zum Download angeboten.

4. Ich nehme an, die PDF's werden auf beliebigen internen Inhaltsseiten zum Download angeboten. Dort mußt du den Link so erstellen, dass er auf den Artikel von Punkt 3 verlinkt und der Dateiname angehängt wird, wie im Wiki beschrieben:

Code: Alles auswählen

index.php?article_id=100&filename=myfile.pdf 
Den Link muß du hinsichtlich article_id und Dateinamen noch entsprechend anpassen.

5. Die PDF's können normal über den Medienpool hochgeladen werden.

Gruß
Dagmar

Anne
Beiträge: 36
Registriert: 13. Feb 2009, 13:16

21. Dez 2009, 08:45

Hallo Dagmar!

Vielen Dank für diese ausführliche Beschreibung. Das hat super funktioniert!

Noch eine schöne Adventszeit und viele Grüße

Anne

dag
Beiträge: 369
Registriert: 24. Aug 2004, 22:11
Wohnort: Dortmund
Kontaktdaten: Website

21. Dez 2009, 13:23

Noch eine schöne Adventszeit und viele Grüße
Hallo Anne,
gern geschen, das wünsche ich dir auch :wink:
Gruß
Dagmar

clinden
Beiträge: 22
Registriert: 22. Nov 2008, 01:03

17. Feb 2010, 02:01

Hi,

sorry ich habe den Eintrag grade erst gefunden.

Ich bekomme das nicht hin. Ich bekomme ein File heruntergeladen (ein PDF), das kommt auch an, nur erkennt der Acrobat das Ding nicht mehr.

Ich habs mal mit nem Texteditor aufgemacht und das File sieht innen drin so aus:

Code: Alles auswählen

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<base href="http://redaxo4.l-nibelungia.de/" />
<meta http-equiv="Content-Language" content="de">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<title>Redaxo4 Test | download</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link rel="stylesheet" type="text/css" href="./files/main_1.css" media="screen" />
</head>
<body>

<table border="0" cellpadding="0" cellspacing="0" width="100%" id="table1">
	<tr>
		<td>
		<table border="0" cellpadding="0" cellspacing="0" width="100%" id="table2">
			<tr>
				<td height="55" valign="top" bgcolor="#001C4E" width="72%">
				<img border="0" src="files/bnr_top.jpg" width="800" height="55"></td>

[...]

                            <td><!-- Content  -->
                                <div id="main">
                                  <div id="main-block">
                                    <div id="main-block2">
                                     %PDF-1.2
%âãÏÓ
670 0 obj

Das heißt es wird zuerst das ganz normale template übertragen. :(

Ich habe schon versucht das Template zu ändern auf ein minimales Template, wo zuerst die athorization geprüft wird und danach dann direkt das file kommt (ohne header). Und im Fehlerfalle kommt dann das Template mit ner Fehlermeldung raus.

Aber irgendwie tut das nicht.

Hat da wer ne idee?

Benutzeravatar
raybeam
Beiträge: 442
Registriert: 5. Feb 2006, 21:30
Kontaktdaten: Website

17. Feb 2010, 18:28

Hallo clinden,

ich habe mir vor einiger Zeit (REX 3.2) für einen ähnlichen PDF-Download folgendes Template für die Downloadseite des PDF-Dokumentes geschrieben:

Code: Alles auswählen

 
<?php 
// Template für eine Downloadseite um Dateien aus einem Verzeichnis
// ausserhalb des Documentroots herunterladen zu können
// Die Seite wir durch Einbindung des Authentifizierungs-Template geschützt

// Einzubindende Templates:
$authTemplateId 		= '2';	// Authentifizierungstemplate

// Authentifizierungs-Template einbinden
if($authTemplateId)
{
	include $REX['INCLUDE_PATH']."/generated/templates/$authTemplateId.template";
}

print $this->getArticle(0); 

?>
Ich weiß nicht, ob es das Thema genau trifft aber vielleicht klappt es ja. Bei mir funktioniert es jedenfalls. Das Einbinden des Authentifizierungs-Templates musst Du natürlich entsprechend an deine aktuelle Redaxo-Version anpassen.

Gruß

Peter

clinden
Beiträge: 22
Registriert: 22. Nov 2008, 01:03

21. Feb 2010, 20:03

Hi Peter,

ich habe Deine Version genommen und etwas abgewandelt.

Bei mir liegen die abzusichernden Daten übrigens im DOCROOT und in einem unterordner von files (nämlich /files/intern).

Um das ganze hinzubekommen mit dem Community-Builder benötigt man folgende Teile:

1. Es wird wie beschrieben ein Modul benötigt. In den Ausgabeteil des Moduls baut man nun den folgenden Code ein.

Code: Alles auswählen

<?php
$file_name = preg_replace('/\?.*$/','',$_REQUEST["filename"]);
$file_path = $REX['INCLUDE_PATH'].'/../../files/intern/'.$file_name;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<base href="http://meine.domain.de/" />
<?
if ($fp = fopen ($file_path, "r"))
{

  $file_type = "application/octetstream";
  header("Expires: Mon, 2 Jan 2001 05:00:00 GMT"); // Date in the past
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");// always modified
  header("Cache-Control: no-store, no-cache, must-revalidate");// HTTP/1.1
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
  header('Content-Type: '.$file_type.'; name="'.$file_name.'"');
  header('Content-Disposition: attachment; filename="'.$file_name.'"');

  fpassthru ($fp);
  fclose($fp);
}
?>
Dadurch wird der eigentliche Download durchgeführt. Nun muß man noch verhindern, daß das normale Template verwendet wird.

$file_name = preg_replace('/\?.*$/','',$_REQUEST["filename"]); verhindert im übrigen, daß filname=name.pdf?71,63 falsch ausgewertet wird. Bei der Verwendung von bestimmten Editoren kann es bei Einfgen eines Bilde daui kommen, daß eine Imagemap angehängt wird. Die wird hier dann einfach abgeschnitten, weil alles hinter dem eigentlich Filenamen wohl falsch sein muß.

2. Template anlegen:
Nun muß ein neues Template ohne nennenswerten Inhalt angelegt werden.

Code: Alles auswählen

 <?php

error_reporting(E_ALL ^ E_NOTICE); // Notices ausschalten

// Authentifizierungs-Template einbinden
//include $REX['INCLUDE_PATH']."/generated/templates/9.template";
$authTemplate = new rex_template(10);
include $authTemplate->getFile();

if(rex_com_checkUserPerm($this->getValue("art_com_perm")))
{
  print $this->getArticle();
}else
{
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Language" content="de">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<title><? print $REX['SERVERNAME'].' | '.$this->getValue("name"); ?></title>
<meta name="keywords" content="<?php print $meta_suchbegriffe; ?>" />
<meta name="description" content="<?php print $meta_beschreibung; ?>" />
<link rel="stylesheet" type="text/css" href="<? echo $REX['HTDOCS_PATH'] ?>files/main_1.css" media="screen" />
<?
   //Weiterleiten auf Startseite
header('Location: http://'.$REX['SERVER'].'/index.php?article_id=79');
}
?>
Als letzte benötigt man nun noch einen Artikel, der einerseits das Template verwendet, und andrerseits das Modul beinhaltet.[/code]

clinden
Beiträge: 22
Registriert: 22. Nov 2008, 01:03

5. Mär 2010, 03:38

Okay,

jetzt habe ich ein neues Problem.

Ich kann damit keine Dateien in einer Größe von mehr als 5MB herunterladen, weil die ganze Datei (mindestens einmal) gepuffert wird. Mein Webserver hat eine Memory Begrenzung von 33MB.

Ich bekomme die folgende Fehlermeldung, egal, ob ich nun fread oder fpassthru benutze:

Code: Alles auswählen

[b]Fatal error[/b]:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 10353322 bytes) in [b]/mnt/web7/32/14/51851314/htdocs/redaxo4/redaxo/include/functions/function_rex_extension.inc.php[/b] on line [b]162[/b]
Das heißt durch das verwendete Modul wird der ganze kram gecached und führt dann zum exhaust. Die Datei ist 10 MB groß, aber die sollten nicht vollständig gecached werden.

Ich habe schon alles versucht wie flush() oder ob_flush() zu verwenden, aber das bringt nichts.

Ich bin hier mit meinem Latein am Ende ... irgendwie bekomme ich den Filedownload so nicht hin. Ich muß aber die Dateien schützen, so daß sie nicht von jedem X-Beliebigen User heruntergeladen werden können :(

Hat da jemand ne Idee?[/b]

Benutzeravatar
die su
Beiträge: 44
Registriert: 19. Jun 2008, 09:23
Wohnort: Heilbronn
Kontaktdaten: Website

Re:

30. Jan 2011, 16:49

dag hat geschrieben:Hallo Anne,

du kannst folgendermaßen vorgehen:
1. htaccess-Datei anlegen,
wie hier http://wiki.redaxo.de/index.php?n=R3.Dokuschutz beschrieben.
Es muß auch eine Datei leer.gif geben, die alternativ zum PDF angezeigt wird.

2. Im Redaxo-Backend ein Template erstellen, das nur den PHP-Code enthält, der in dem Wiki-Text angegeben ist.

Code: Alles auswählen

<?php
$file_name = $_REQUEST["filename"];
$file_path = $REX['INCLUDE_PATH'].'/../../files/'.$file_name;

if ($fp = fopen ($file_path, "r"))
{

  $file_type = "application/octetstream";
  header("Expires: Mon, 2 Jan 2001 05:00:00 GMT"); // Date in the past
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");// always modified
  header("Cache-Control: no-store, no-cache, must-revalidate");// HTTP/1.1
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
  header('Content-Type: '.$file_type.'; name="'.$file_name.'"');
  header('Content-Disposition: attachment; filename="'.$file_name.'"');

  fpassthru ($fp);
  fclose($fp);
}
?>
3. Einen Artikel im internen Bereich anlegen, dem dieses Template zugewiesen wird. Hier wird das ausgewählte PDF dann angezeigt bzw. zum Download angeboten.

4. Ich nehme an, die PDF's werden auf beliebigen internen Inhaltsseiten zum Download angeboten. Dort mußt du den Link so erstellen, dass er auf den Artikel von Punkt 3 verlinkt und der Dateiname angehängt wird, wie im Wiki beschrieben:

Code: Alles auswählen

index.php?article_id=100&filename=myfile.pdf 
Den Link muß du hinsichtlich article_id und Dateinamen noch entsprechend anpassen.

5. Die PDF's können normal über den Medienpool hochgeladen werden.

Gruß
Dagmar

Hallo, ich habe diese Vorgehensweise soeben ausgetestet: funktioniert alles prima. Einzige Einschränkung: Wenn ich nun den link des Artikels und den Namen des pdfs kenne, (z.B. index.php?article_id=100&filename=myfile.pdf) kann ich ihn in meine Browserzeile einfügen und kann die Datei ganz ohne Anmeldung herunterladen.

Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

31. Jan 2011, 13:39

Hi,

der Code sieht etwas gefährlich aus.

z.B. man könnte wahrscheinlich mit diesem Aufruf die master.inc.php herunterladen:

index.php?article_id=100&filename=../redaxo/master.inc.php


lg

Dave

Benutzeravatar
die su
Beiträge: 44
Registriert: 19. Jun 2008, 09:23
Wohnort: Heilbronn
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

31. Jan 2011, 14:02

ja, so seh ich das auch. steht so im Forum als "GELÖST". Und ich bin nicht grade das, was man einen php-Profi nennt. Also hab ich rumgetestet und bin darauf gestoßen, dass diese Vorgehensweise eben nicht sicher ist.
Ich brauche für einen Kunden einen sicheren internen Bereich - ein Archiv - wo der Kunde seine pdfs und word-Dateien hinterlegt, die absolut sicher sind. Wer kann mir eine Empfehlung geben? REX 4.2.1

dag
Beiträge: 369
Registriert: 24. Aug 2004, 22:11
Wohnort: Dortmund
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

31. Jan 2011, 21:51

Wenn ich nun den link des Artikels und den Namen des pdfs kenne, (z.B. index.php?article_id=100&filename=myfile.pdf)
Hallo Su,
du mußt natürlich auch auf dieser Seite sicherstellen, dass sie nur im eingeloggten Zustand angezeigt wird. Darüber hinaus ist es sehr unwahrscheinlich, dass jemand, der nicht auf den internen Bereich Zugriff hat, exakt diese Adresse und den genauen Dateinamen kennt.

Code: Alles auswählen

z.B. man könnte wahrscheinlich mit diesem Aufruf die master.inc.php herunterladen:
Hallo Dave,
nein, hier kommt eine Fehlermeldung, da der Pfad nicht stimmt.
Außerdem ist der Bereich /redaxo/include/... durch die .htaccess gesichert.
Und man sollte den übergebenen Dateinamen vor dem Aufruf filtern.

Schöne Grüße
Dagmar

Benutzeravatar
Gregor.Harlan
Entwickler
Beiträge: 1130
Registriert: 4. Jun 2007, 10:35
Wohnort: Frankfurt am Main

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

31. Jan 2011, 22:32

dag hat geschrieben:nein, hier kommt eine Fehlermeldung, da der Pfad nicht stimmt.
Außerdem ist der Bereich /redaxo/include/... durch die .htaccess gesichert.
Und man sollte den übergebenen Dateinamen vor dem Aufruf filtern.
Hallo Dagmar,

die Dateien im include-Ordner sind nur vor dem direkten Aufruf geschützt, den umgehst du aber ja gerade.
Mit &filename=../../redaxo/include/master.inc.php kann ich bei deinem oben geposteten Code die master.inc.php herunterladen.

Gruß, Gregor
Friends Of REDAXO: Gemeinsame REDAXO-Entwicklung!

Benutzeravatar
die su
Beiträge: 44
Registriert: 19. Jun 2008, 09:23
Wohnort: Heilbronn
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

31. Jan 2011, 22:42

Hallo Dagmar, im entsprechenden Artikel ist der Teil 2 des Moduls enthalten. Trotzdem schaffe ich es, das pdf ohne Passwort runterzuladen. Und Link kennen oder nicht. Die betreffenden Files sind unter Beobachtung durch Wettbewerb und Abmahner. Es muss also absolut sicher sein ... ich versuche das Community-Addon. Wird aber ein paar Tage dauern. Werde das Ergebnis posten.

Hallo Gregor, ja. Funktioniert genau, wie du beschreibst. Es wird umgangen.

Hallo Dave, danke für Deine Hilfe.

dag
Beiträge: 369
Registriert: 24. Aug 2004, 22:11
Wohnort: Dortmund
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

1. Feb 2011, 01:05

Hallo su,
ich habe diese Beschreibung nicht geschrieben. Ich weise nur darauf hin, dass man bei Verwendung dieses Codes auch sicherstellen muß, dass die entsprechende Seite nur einem eingeloggten Besucher zugänglich sein darf.
Schöne Grüße
Dagmar

dag
Beiträge: 369
Registriert: 24. Aug 2004, 22:11
Wohnort: Dortmund
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

1. Feb 2011, 01:27

Code: Alles auswählen

die Dateien im include-Ordner sind nur vor dem direkten Aufruf geschützt, den umgehst du aber ja gerade. Mit &filename=../../redaxo/include/master.inc.php kann ich bei deinem oben geposteten Code die master.inc.php herunterladen.
Hallo Gregor,
der Code stammt aus dem Redaxo-Wiki (s. http://wiki.redaxo.de/index.php?n=R3.Dokuschutz). Ich habe nur darauf Bezug genommen. Möglicherweise müßte er aufgrund dieser Diskussion erweitert werden. Insofern ist die Diskussion sicherlich sinnvoll. Wie bereits gesagt, man muß die übergebenen Daten überprüfen und selbst wenn man dies ausschaltet, erhalte ich immer noch eine Fehlermeldung statt der Ausgabe der master.inc.php.
Schöne Grüße
Dagmar

Benutzeravatar
die su
Beiträge: 44
Registriert: 19. Jun 2008, 09:23
Wohnort: Heilbronn
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

1. Feb 2011, 01:30

Schon klar, dass du das nicht geschrieben hast. Bitte, nichts für ungut ...

dag
Beiträge: 369
Registriert: 24. Aug 2004, 22:11
Wohnort: Dortmund
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

1. Feb 2011, 10:56

Hallo su,
deine Hinweise sind gut und sinnvoll. Vielleicht sollte man im Wiki noch auf die weitergehenden Sicherheitsaspekte verweisen. Gelöst werden müssen sie, denke ich, jeweils individuell.
Viele Grüße
Dagmar

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

1. Feb 2011, 12:55

dag hat geschrieben:..Insofern ist die Diskussion sicherlich sinnvoll. Wie bereits gesagt, man muß die übergebenen Daten überprüfen ..
Wobei man an der Stelle doch anmerken sollte, daß eine solche Überprüfung dann auch wirklich wasserdicht sein müßte.. und das ist angesichts der Möglichkeiten was unterzuschieben garnicht so trivial. Alternativ sollte man das Konzept dahingehend überdenken, daß man den user input abstrahiert, und z.b. lediglich eine ID - z.b. die Medienpool file_id - übergibt. Darüber läßt sich einfach und sicher eine eingegrenzte und saubere Zuordnung herstellen..

lg,
j.
vg, Jan

dag
Beiträge: 369
Registriert: 24. Aug 2004, 22:11
Wohnort: Dortmund
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

1. Feb 2011, 13:39

und z.b. lediglich eine ID - z.b. die Medienpool file_id - übergibt
Hallo Jan,
das ist eine gute Idee. Setzt dann voraus, dass die Dateien nicht in einem gesonderten Ordner liegen.
VG
Dagmar

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

1. Feb 2011, 14:07

dag hat geschrieben:Setzt dann voraus, dass die Dateien nicht in einem gesonderten Ordner liegen.
Nein, nicht zwingend.. aber Wege zum Ziel gibts da ziemlich viele, je nach Anforderung & erlaubtem Aufwand. Mir ging es - weil ich vor kurzem selbst einen solchen sec lapsus in ein plugin gestrickt hatte - darum nochmal auf die Thematik hinzuweisen. Man hat halt - froh was gestrickt hat das überhaupt mal funktioniert - schnell unbedacht Scheunentore für exploits geschaffen.. und selbst wenn man meint alles hinreichend bedacht und abgesichert zu haben, grinst einen das böse weite Internet nur hämisch an.. ;-)

lg,
Jan
vg, Jan

dag
Beiträge: 369
Registriert: 24. Aug 2004, 22:11
Wohnort: Dortmund
Kontaktdaten: Website

Re: GELÖST: Dokument im Medienpool mit PW-Schutz

1. Feb 2011, 14:48

und selbst wenn man meint alles hinreichend bedacht und abgesichert zu haben, grinst einen das böse weite Internet nur hämisch an.. ;-)
Das ist leider wahr. :( . Absolute Sicherheit gibt es hier nicht.
VG
Dagmar

Mukido
Beiträge: 49
Registriert: 14. Mär 2008, 15:18

Re: Dokument im Medienpool mit PW-Schutz

23. Feb 2011, 17:49

Hallo,

ich sitze auch gerade an einem Projekt welches Dateidownload mit geschützten PDF-Dateien beinhaltet. Ich hatte auch das Problem, dass man die master.inc.php herunterladen konnte.
Mit diesem Script kann ich jetzt nur noch pdf Dateien herunter laden.
Da ich kein PHP Profi bin, wäre ich über Feedback dankbar.

Code: Alles auswählen

<?php
function makeDownload($file, $dir, $type)
{    
    header("Content-Type: $type");
    header("Content-Disposition: attachment; filename=\"$file\"");
    readfile($dir.$file);    
} 

$dir = './files/';
$type = 'application/pdf';

$downloadFile = str_replace("../", "",$_GET['filename']);

if(!empty($downloadFile) && !preg_match('=/=', $downloadFile)) {
    if(file_exists ($dir.$downloadFile))     {
        makeDownload($downloadFile, $dir, $type);
    }
        
}
?>
Das Script stammt von: http://www.selfphp.info/kochbuch/kochbuch.php?code=37

Grüße

Benutzeravatar
Markus.Lorch
Beiträge: 682
Registriert: 21. Okt 2007, 17:22
Wohnort: Walheim

Re: Dokument im Medienpool mit PW-Schutz

26. Feb 2011, 17:02

Fals noch jemand nen anderen Lösungsansatz sucht:

Ich habs in Kombination mit dem Community-AddOn - Meta-Feld für die Medien: wenn gesetzt -> Passwortschutz. Mit Dateien die es dann im Medienpool gar nicht gibt, gehts dann natürlich auch nicht ;)
Grüße,
Markus Lorch

Tschüssle sagt Herr Nüssle

clinden
Beiträge: 22
Registriert: 22. Nov 2008, 01:03

Re: Dokument im Medienpool mit PW-Schutz

28. Feb 2011, 14:44

Hallo zusammen,

@Markus.Lorch,

das ist keine Lösung, da alle Dateien im files vom normalen Browser heruntergeladen werden können. Das genau muß aber in jedem Fall verhindert werden. Daher gibt es eben ein separates Verzeichnis in dem durch .htaccess verboten wird irgendwas herunterzuladen.

Okay, ich habe nun auch eine Lösung für das Problem gefunden, die für meinen Fall recht einfach ist:

Hier der Code:

Code: Alles auswählen

<?php
$file_name = basename(preg_replace('/\?.*$/','',$_REQUEST["filename"]));
$file_path = $REX['INCLUDE_PATH'].'/../../files/intern/'.$file_name;

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<?

if ($file= fopen($file_path, 'rb' )) {
  $file_type = "application/octetstream";
  header("Cache-Control: ");
  header("Pragma: ");
  header("Content-Length: ".(string)(filesize($file_path)) );
  header('Content-Type: '.$file_type.'; name="'.$file_name.'"');
  header('Content-Disposition: attachment; filename="'.$file_name.'"');

//  readfile($file_path);
   fpassthru($file);
   fclose($file);
} else {
  // file gibt es scheinbar nicht, also Fehlerseite ausgeben.
?>
  <meta http-equiv="refresh" content="5; URL=http://www.meine-seite.de/23-0-Fehler.htm">
<?
}
?>
</head>
Der kritische Teil ist diese Zeile:
$file_name = basename(preg_replace('/\?.*$/','',$_REQUEST["filename"]));

Hier wird einfach alles außer dem eigentlich Filenamen abgeschnitten. Das heißt: egal, was der Böse Angreifer mal angegeben hat, es bleibt nur der Filename über.

Beispiel:
Der Angreifer hat filename=../../redaxo/include/master.inc.php angegeben.

Dann wird in die Variable $file_name=basename(../../redaxo/include/master.inc.php) eingelesen, was dann $file_name=master.inc.php ergibt.

Danach wird weiter unten geprüft, ob es die Datei gibt, wobei dann wieder der /files/intern Pfad aus Redaxo Sicht angefügt wird. Es wird dann also geprüft, ob das File /files/intern/master.inc.php existiert.

Da es in meinem Fall nicht existiert :D wird stattdessen auf eine Fehlerseite umgeleitet.

Das könnt Ihr natürlich beliebig abändern, wie Ihr möchtet.

Dadurch sollte ein derartiges SIcherheitsrisiko behoben sein.

Vielen Dank für die Information, das war mir nicht aufgefallen ...

BTW: Kann jemand das Wiki anpassen? Das ist eine einfache Lösung und müsste halt auch dort angepasst werden. Leider kann ich das nicht machen, weil ein Passwort benötigt wird. ?? Ich hätte mal gedacht, mein User reicht dazu.

Zurück zu „Allgemeines [R4]“