Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

include und geschütztes verzeichnis

Hi!

So werden meine Seiten in die index.php inkludiert:

Code:                   In Zwischenablage kopieren (nur IE)
1">

Nun habe ich ein geschütztes verzeichnis angelegt, zB "/admin/" ... dort liegt zB admin.php.
Ein direkter Aufruf "http://seite/admin/admin.php" erfordert die Eingabe von Benutzername und Passwort.
Allerdings kann ein möglicher Angreifer dies ganz leicht umgehen, indem er
....index.php?site=admin/admin eingibt !

Wie kann ich das verhindern ?
Hier gehts zum Orginal Eintrag "include und geschütztes verzeichnis" im Forum

Antworten

Das scheint mir ein logischer oder gar Konzept Fehler zu sein...
Richte doch für den Admin eine Session ein!
Setze nach erfolgreichem Login ein Flag in Session.

Wenn Flag nicht gesetzt dann harter Abbruch!

Wie funktioniert denn deine Loginprozedur?


2.

Hm, Fehler auf jeden Fall...

Bleibt mir wirklich nur der Weg über ein Login und Session (kein Problem).

Bis jetzt habe ich ja noch keine Login-Prozedur, sondern nur das per .htaccess geschützte Verzeichnis.
Mit direktem Aufruf kommt man sowieso nicht rein, aber über die index.php? sehr wohl....

Danke,
Elmar


3.

in admin.php überprüfst du doch hoffendlich die HTTP Authentifizierung....
Wenn ja, sollte es doch so in Ordnung sein...

Bedenke, das der Browser username & passwort bei jedem Aufruf zum Server schickt.
Also einmal eingeloggt, immer eingeloggt.

Browser zu, Browser auf, dann sollte es bis zum nächsten Login nicht mehr gehen...


4.

Zitat:
combie postete
in admin.php überprüfst du doch hoffendlich die HTTP Authentifizierung....

Ähm nein...
wie ?


5.

mmm, ka..
setze doch mal an den Anfang von admin.php
Code:                   In Zwischenablage kopieren (nur IE)
2">




6.

Naja, das wollte ich ja vermeiden...
Ich möchte ja selbst auch die admin-seite so aufrufen:
...index.php?site=adminblablabla...

Ich schätze, das muss in die index.php ?

Code:                   In Zwischenablage kopieren (nur IE)
3">

Wenn ich das nämlich erst in die includierte admin.php setze, gehts nicht...

EDIT: Hm, geht nicht.... in der index.php - dann sperr ich ja alles raus...


7.

Aber dann MUSS sich ja JEDER Authentifizieren, nicht nur der Admin...

Also ich arbeite fast nur mit PHP-Loginscripten & Sessions & MySQL
Das ist einfach flexiebler......


8.

Zitat:
combie postete
Aber dann MUSS sich ja JEDER Authentifizieren, nicht nur der Admin...

Habs schon bemerkt ^^
Zitat:
Also ich arbeite fast nur mit PHP-Loginscripten & MySQL
Das ist einfach flexiebler......
Hm, hätte ich auch geglaubt. Ein Codeschnippsel für Login hätte ich schon,
aber da klappt die session nicht (headers already sent...)


9.

Zitat:
headers already sent.
session_start() und header() MÜSSEN vor irgendwelchen Ausgaben aufgerufen werden,
sonst kommt der Fehler :)


10.

Ja eben...

der header ist in der index.php definiert,
session_start() in der admin.php ...

Aber ich nehm jetzt diese Variante:
Code:                   In Zwischenablage kopieren (nur IE)
4">

Die admin-seite wird ja sowieso nicht direkt verlinkt..

Danke,
Elmar


11.

Zitat:
der header ist in der index.php definiert,
session_start() in der admin.php
warum soll session_start NICHT in die index?


12.

Hab ich noch nicht getestet.

session_start() in die index.php
und den rest (formular mit name und password) in die admin.php ?


13.

Klaro!!
Du machst doch include("admin.php")!
Und damit hüpft admin.php doch in dieselbe CodeStruktur :)
und $_SESSION steht dir überall zur Verfühgung


14.

Ok, Danke!

Werd ich mal testen.

Entweder die Version, dass die admin nur als stand-alone aufgerufen werden darf oder
jene mit der session, wobei mir die session besser gefällt.

Danke für deine Geduld! :)


15.

Bins schon wieder ;)

Die Variante als stand-alone funktioniert, aber "schöner" wäre eine session.

Nun habe ich aber das Problem, dass die Sessiondaten (...?action=login&name=name&password=password)
nicht an die includierte Seite übergeben werden, sondern an die index.php.
Es sollte so sein:
...index.php?site=admin&action=login&name=name&password=password

Leider kommts aber so raus:
...index.php?action=login&name=name&password=password

Code:                   In Zwischenablage kopieren (nur IE)
5">

wo ist mein Denkfehler ?

Danke,
Elmar


16.

Zitat:
Sessiondaten (...?action=login&name=name&password=password)
Das sieht nicht aus wie SessionDaten, mehr wie GET Parameter...
Überhaupt, das passwort per GET zu übergeben, halte ich für arg bedenklich...

Woher kommt $name & $pass?
Code:                   In Zwischenablage kopieren (nur IE)
6">

Also, ich klammere sehr viel, dann brauche ich nicht über die Operatoren Reihenfolge nachdenken :)
Bei Vergleichen stelle ich immer die Konstante nach links !

Hoffendlich hilfts, weil: So ganz habe ich das Problem noch nicht erkannt :)


17.

Zitat:
combie postete
Das sieht nicht aus wie SessionDaten, mehr wie GET Parameter...
Überhaupt, das passwort per GET zu übergeben, halte ich für arg bedenklich...
...
Woher kommt $name & $pass?
Nunja, arg bedenklich vielleicht schon...aber momentan hab ich nix besseres...
name und passwort stehen in der admin.php (könnten auch in einer config-datei stehen, egal.
es funktioniert ja, nur leider wird von der index.php ausgegangen, statt von der includierten
admin.php (index.php?site=admin)

EDIT: Ach ja, $name und $pass kommen vom login-formular
auf der admin.php. ($action == 'logout') ist eh vorhanden (nur nicht gepostet)


18.

Zitat:
, nur leider wird von der index.php ausgegangen, statt von der includierten
admin.php
Bahnhof!

Setze doch mal an den Anfang aller betreffenden Scripte
Code:                   In Zwischenablage kopieren (nur IE)
7">

vielleicht schreit PHP um Hilfe und keiner hört zu :)


19.

OK, nochmal:

Die Datei index.php:

Code:                   In Zwischenablage kopieren (nur IE)
8">

Die Datei admin.php (im verzeichnis /admin/xxx/nochwas/)

Code:                   In Zwischenablage kopieren (nur IE)
9">

Das Problem:
Nach erfolgtem Login bleibe ich nicht auf der admin-seite sondern werde zurück zur index.php geleitet,
weil die parameter nicht an die admin-seite übergeben werden.
Es sollte so sein:
...index.php?site=admin&action=login&name=name&password=password

Leider kommts aber so raus:
...index.php?action=login&name=name&password=password


20.

Sorry, ich verstehs nicht....
Wieso weiterleiting zur Adminseite ?
Ich dachte, index.php wäre dein Dreh und Angelpunkt....

Und:
header("Location: ".$web); bedarf einer KOMPLETTEN url!
z.b. header("Location: http://www.irgendwas.de/index.html?site=admin";);

Meine TRUE und FALSE Konstanten magst du wohl nicht?
Code:                   In Zwischenablage kopieren (nur IE)
10">

ist meines bescheidenen erachtens Quatsch


21.

Ja, index.php ist der Dreh- und Angelpunkt!

Deine True/False-Konstanten mag ich sehr wohl, ich habs nur noch nicht eingebunden...

Das Script funktioniert ja (naja, fast), also jedenfalls werden keine Fehler ausgegeben.
"Location: " . $web wird doch nur in dem Fall gebraucht, wenn kein gültiger Name und Passwort angegeben
wurde, das Login also falsch war.

Also nochmal:
Wenn ich in die Adresszeile meines Browers das hier eingebe, dann bin ich dort, wo ich hin will!
localhost/xxx/index.php?site=admin/test/admin&action=login&name=name&password=password

Login liefert aber:
localhost/xxx/index.php?action=login&name=name&password=password

ES FEHLT SITE=ADMIN...und soweiter :(


22.

Zitat:
site=admin/test/admin
Wenn es fehlt, dann gibst du es wahrscheinlich nicht aus...
Aber wo die Ausgabe stattfindet... KA, nie gesehen...
Wo wird der Link denn zusammengebastelt?


23.

Zitat:
combie postete
Wenn es fehlt, dann gibst du es wahrscheinlich nicht aus...
Die Datei admin.php:

Code:                   In Zwischenablage kopieren (nur IE)
11">

Also eigentlich sollte das Formular bei "action=" den richtigen Eintrag haben, oder?


24.

Zitat:
Das Script funktioniert ja (naja, fast), also jedenfalls werden keine Fehler ausgegeben.
LOL, dass nenn ich mal die Aussage eines echten Programmieres über die Lauffähigkeit seines Programms :D :D :D

Ich les jetzt schon ein bisschen mit.... Kann es sein, dass das Ganze immer verzwickter wird......

Außerdem solltest du die Variablenübergabe per $_POST machen. Wer übergibt den Passwörter per $_GET?

Worin besteht eigentlich die Schwierigkeit statt showinhalt() den Teil mit $_GET['seite'] zu schreiben und das Ganze halt um die $_SESSION zu erweitern. Vielleicht solltest du das ganze nochmal auf Papier aufzeichnen, in Ruhe überlegen und eine Nacht drüber schlafen, sonst wird das alles noch verwirrter...


25.

Huuu, stelle doch mal alles auf method="post" um.....(ist nur ein Vorschag)

alternativ: <input type="hidden" name="site" value="admin/test/admin">


26.

Lauffähig ist gut ;)
Ich meinte, es werden keine Fehler ausgegeben...

Die function showinhalt() beinhaltet die admin-funktionen, die eben erst angezeigt werden, wenn
das Login erfolgreich war. Darin liegt nicht der Hund begraben...


27.

Ich sch.... jetzt sowieso auf den ganzen Krempel!

Der Fehler liegt im Formular.
<form action=...index.php?site=....> kann nicht verarbeitet werden.
<form action="http://www.xxx.com/admin/test/admin.php"> dagegen schon.
Dann klappts aber nicht mehr mit dem includen, eh klar....

ich such mir eine anständige Anleitung für eine Session.

Danke,
Elmar


Hier gehts zum Orginal Eintrag "include und geschütztes verzeichnis" im Forum
 
phpforum.de | Impressum