Page 1 of 1

[SOLVED] $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Tue 26. Apr 2011, 17:57
by ShyGuy
Hallo,

ich steh' anscheinend schon den ganzen Tag auf dem Schlauch, aber $_SESSION[$_REQUEST["PHPSESSID"]] gibt den User der Session nicht aus.

Ich rufe über

Code: Select all

<a href="/template/inc_script/two.php" target="_self">test</a>
auf. In two.php steht einfach nur

Code: Select all

<?php
echo '>'.$_SESSION[$_REQUEST["PHPSESSID"]].'<'
?>
Was mache ich falsch, oder besser, wie mache ich es richtig ?

Ein kleiner Schubser in die richtige Richtung würde meinen Tag retten !


Vielen Dank !
Stefan

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Tue 26. Apr 2011, 18:11
by flip-flop
Hi,

welcher User soll das denn sein???
Ein angemeldeter User?

sonst ersteinmal im /frontend_render/ testweise:

Code: Select all

dumpVar($_SESSION);
Und im wiki nach $_SESSION suchen.

knut

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Tue 26. Apr 2011, 18:13
by ShyGuy
also wenn ich das Ganze in den frontend_renderer lege:

Code: Select all

<?php
  $content['all'] = str_replace('{STATUS}', status(), $content['all']);
  function status() {
    $ausgabe = $_SESSION[$_REQUEST["PHPSESSID"]];
  return $ausgabe;
  }
?>
funktioniert es !?

Leider benötige ich die Ausführung des Scripts auf Mausklick und nicht grundsätzlich beim Aufruf der Seite, so dass ich immer noch nicht weiß, wie ich das lösen soll :?

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Tue 26. Apr 2011, 19:11
by ShyGuy
dumpVar($_SESSION);
Na ja, gerade das ist ja mein Problem. Im frontend_renderer ist die Information vorhanden -nur wenn ich die PHP-Datei über den Link einbinde, geht sie mir flöten !

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Tue 26. Apr 2011, 20:01
by juergen
was meinst du mit "Mausklick" ? Hast du ein Beispiel ?

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Tue 26. Apr 2011, 20:25
by ShyGuy
Hallo !

Ein Beispiel ist ein wenig schwierig, da die Site on-line ist und ich nur begrenzt rumspielen kann.

Mit Mausklick meine ich folgendes Szenario:
Ich habe eine Handvoll Dateien in einem nicht öffentlichen Ordner. Im privaten Bereich der Site soll es nun einen Link geben, mit dem die dem Login entsprechende Datei gezogen werden kann; alle anderen Dateien dürfen keines Falls zugänglich sein.

Geplant war es, folgenden Code als HTML im privaten Bereich zu haben:

Code: Select all

<a href="/template/inc_script/external.php" target="_self">Deine Datei</a>
und dann über PHP wie folgt die Dateien durch zu reichen:

Code: Select all

<?php
downloadfile('../../files/'.$_SESSION[$_REQUEST["PHPSESSID"]].'.xls');

function downloadFile( $fullPath ){
  // noch nix gesendet...
  if( headers_sent() )
    die('Headers Sent');

  // Required for some browsers
  if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');

  if( file_exists($fullPath) ){
   
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
   
    header("Pragma: public");

    // CACHE ausschalten !
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers
    header("Content-Type: $ctype");

    //  Content-Disposition  =  attachment;  fordert  den  "Speichern-Dialog"
    header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );

    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$fsize);
    // output buffer sauber machen
    ob_clean();
    // Leert (sendet) den Ausgabepuffer
    flush();

    // Sendung !
    readfile( $fullPath );  // hier wird die Datei durchgereicht

  } else
	die('File Not Found');
}
?>
Leider ist $_SESSION[$_REQUEST["PHPSESSID"]] in diesem Fall absolut leer; als ob die Session beendet wurde.
Binde ich den Code über frontend_render ein, habe ich über $_SESSION[$_REQUEST["PHPSESSID"]] Zugriff auf den Login.

Ich schnall das nicht...

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Tue 26. Apr 2011, 20:27
by ShyGuy
Mausklick = ich möchte die Datei nicht schon beim Laden der Seite zum Download anbieten, sonder erst auf Anforderung.

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Tue 26. Apr 2011, 20:35
by juergen
Ja, dann musst du den User abfragen und die Dateien im Script (IM !!) verlinken. Schwierig wird das wenn du die von aussen nicht zugänglich haben möchtest.

Dei Deklaration muss im frontend-render script passieren, da das System sonst alle Umgebungsvariablen (somit auch den User) verliert, wenn du das anders aufsetzt. Wenn es nicht so viel Arbeit ist, schicke dich dir ein Muster ...

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Tue 26. Apr 2011, 20:41
by juergen
Und irgendwo im Config muss die Sessioniererei auch zugelassen werden *anmerk*

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Wed 27. Apr 2011, 08:20
by ShyGuy
Die Sessions habe ich selbstverständlich in der Config aktiviert - über ein Beispiel würde ich mich sehr freuen !

Wenn es eine Möglichkeit gibt, das Ganze in-line zu machen, ohne die Daten zu kompromittieren, wäre das auch sehr interessant :)


Danke !

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Wed 27. Apr 2011, 09:29
by swisscheese
Hallo

Eventuell musst du die Session in deiner Datei manuell starten:

Code: Select all

<?php
session_start();
echo '>'.$_SESSION[$_REQUEST["PHPSESSID"]].'<'
?>
Gruss, swisscheese

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Wed 27. Apr 2011, 09:45
by ShyGuy
Juchu (!) das war's !

Vielen vielen Dank ! ich mach' mich jetzt mal an die Arbeit ;)

Re: [SOLVED] $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Wed 27. Apr 2011, 10:22
by juergen
Damit verlässt er das phpwcms Sicherheitskonzept aber total wenn er sowas überlagert... *grübel*

Re: [SOLVED] $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Wed 27. Apr 2011, 10:32
by swisscheese
DF6IH wrote:Damit verlässt er das phpwcms Sicherheitskonzept aber total wenn er sowas überlagert... *grübel*
Das verlässt er ja sowieso, wenn er ein externes Skript aufruft. Ich hoffe, er wird seine Gründe dafür haben. Sauberer wäre sicher die Einbindung mit einem Frontendrender Skript oder gar Modul. Aber auch hier kannst viel verbocken :lol:
Der session_start überlagert ja gar nichts, er startet nur die Session, wenn im php.ini die session.auto-start nicht auf true gesetzt ist.

Gruss, swisscheese

Re: [SOLVED] $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Posted: Wed 27. Apr 2011, 17:16
by flip-flop
Ich würde das sicher nicht extern angreifen. Du bekommst die Dateien nicht so einfach versteckt.

Intern gibt es dazu eine recht einfache Lösung: [xdownload=IDs||t:ags||f:older-IDs/]

1. Eingebautes Login verwenden

2. Die betreffende User dort eintragen und den CP Login einsetzen und gegen die BE DB prüfen.

3. Nun in der Dateizentrale den betreffenden Dateien als "Tag/Schlagwort:" den Anmeldenamen des Users mitgeben.
- Vielleicht noch die Datei kennzeichnen mit "[x] geschützter Download im Frontend".

4. Diesen TAG einsetzen.
Wenn ein unsinniger Name für ein Template angegeben wird dann generiert der RT einen einfachen Link.

Code: Select all

<!--LOGGED_IN_START//-->
.....
[xdownload=t:[PHP]echo $_SESSION[$_REQUEST["PHPSESSID"]];[/PHP]:nix,,,1, /]
.....
<!--LOGGED_IN_END//-->
erzeugt einen Link:

Code: Select all

<ul class="fileDownload">
	<li><a href="download.php?f=ef08dfec18f369c305c0d0fe4a5adf3d" target="_self">doc-test.doc</a></li>
</ul>
Vorteil: Die Dateien sind ohne ein Login von außen nicht erreichbar, wenn die .htaccess in /filearchive/ aktiv ist.

Wenn die Identifikation gegenüber der Datei mit dem einfachen Useranmeldenamen zu schwach ist, weil das vielleicht ein recht einfacher Name sein könnte der mit anderen Tags verwechselt werden kann, dann den "Tag/Schlagwort:" künstlich erweitern und bei der Datei eintragen.
Z.B. ##Anmeldename##

Code: Select all

[xdownload=t:[PHP]echo '##'.$_SESSION[$_REQUEST["PHPSESSID"]].'##';[/PHP]:nix,,,1, /]

Natürlich kann bei einem brauchbaren CP-Listen Template anstelle von "nix" die ganze Sache schicker gestaltet werden.
Obendrein kannst du mehr als eine Datei anbieten bei der das Schlüsselwort trifft wenn nötig (aus der "1" wird dann z.B. ein "5").
Und es ist eine saubere interne Lösung bei der man nicht Gefahr läuft das System zu öffnen.

Knut