BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- PHP Ordner nach Login schützen. (http://www.black-board.net/thread.php?threadid=22970)


Geschrieben von Flux am 27.07.2007 um 11:25:

  Ordner nach Login schützen.

Durch den Login prüfe ich ganz normal ob User und Pwd korrekt sind. Alles klar soweit.

Wenn die daten korrekt sind folgt eine Weiterleitung zu einer Seite in einem Untergeordneten Ordner. Alle Seiten/Dateien in diesem Ordner sind nur für eingeloggte User bestimmt.

BSP:

www.meineurl.com (hier ist der login)
www.meineurl.com/intern (hierhin kommt der user wenn er korrekt eingeloggt hat.)

Wenn nun jemand die Seittennamen und den Unterordnernamen kennt könnte derjenige natürlich einfach daher kommen und z.B. ww.meineurl.com/intern/adminpanel.php eintippen. Und schon wär er da wo er nicht hin darf.

Was gibt es für Varianten das schön zu lösen?

1. Login per HTAcces bzw Passwortgeschütztes Verzeichniss.
+ Problem gelöst.
- Der Benutzer kann seine Logindaten nicht ändern.
- Die Login Seite hat kein "Design" da es keine gibt.

2. Auf jeder Seite prüfen ob die beim Login kreirte Session vorhanden ist.
wenn ja seite ausgeben
wenn nein error

3. Die Verbindung zur Datenbank nur aufbauen, wenn die Session vorhanden ist.
Die Seiten können dann zwar angezeigt werden, allerdings kann man damit nichts anfangen.

3. Wenn die Session nicht vorhanden ist eine sofortige 0Sekunden meta weiterleitung machen, welche aus dem ordner wieder ins root führt.

4. ?
5. ?
6. ?

Weitere Vorschläge/Ideen/Lösungen?



Geschrieben von LX am 27.07.2007 um 12:46:

Achtung

Variante 2 dürfte die gebräuchliche sein. Dabei prüfst du einfach zu Beginn jeder Seite im geschützten Bereich, ob eine Session besteht und ob sie korrekte Daten beinhaltet.

Weiterleitungen würde ich übrigens nicht mit META-Tags machen, sondern das auf HTTP-Ebene mittels header()-Funktion in PHP machen.



Geschrieben von Flux am 27.07.2007 um 13:01:

 

ok danke...

also in der art:
php:
1:
2:
3:
4:
5:
6:
if (eingeloggt){
echo "Seiteinhalt";
}
else {
echo "Error";
}


das muss doch irgendwie "schöner" realisierbar sein als mit dem echo oder?

p.s. wenn man nur einen benutzer hat muss die variable gar keinen wert haben sondern einfach vorhanden sein oder?

wenn die Variable einfach einen ungewöhnlichen Namen hat z.B. einen Code reicht es aus, wenn man sie mit if(isset($_Session[xy])) checked oder?
Dann könnte man sich nämlich beim der überprüfung die den connect zur db sparen.



Geschrieben von LX am 27.07.2007 um 16:45:

Achtung

Zitat:
Original von Flux
das muss doch irgendwie "schöner" realisierbar sein als mit dem echo oder?
Ja, z.B. in der Form

php:
1:
2:
3:
4:
5:
6:
7:
<?php

if ( !$eingeloggt )
    header 'Location: login.php' );

?>
<!-- eigentliche Seite -->


Wie du $eingeloggt nun genau gestaltest, bleibt dir überlassen. Wenn du nur einen Nutzer hast, brauchst du natürlich keine komplexe Nutzerverwaltung mit ACLs in einer Datenbank, dann reicht's auch, da einfach nur eine Variable zu setzen, die beispielsweise das angegebene Passwort enthält.



Geschrieben von Flux am 08.08.2007 um 11:21:

 

verstehe danke!

sollte man nicht mit exit; noch den nachherstehenden code "verbieten"?

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:

<?php
if ($login!="yes"){
    header("Location: http://www.error.com/"); 
    exit;
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unbenanntes Dokument</title>
</head>

<body>
Hier steht die Seite 
</body>
</html>


p.s. header(); besitzt ja den header schon, weshalb kein <header> da stehen darf. die meta tags etc. und das </header> kommen dann (wie im beispiel hier) einfach darunter oder? ist das richtig so ?



Geschrieben von phlox81 am 08.08.2007 um 15:24:

 

Header bewirkt doch hier eine Umleitung zu der Seite welche angegeben ist,
das heisst der rest der Seite wird garnicht ausgeliefert.


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH