• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Loginsystem-frage?

Werbung:
ehm wie bitte?
Nur wie kann ich es schaffen, ohne das ich alles wieder kopieren muss und dort immer den code auf allen seiten einfügen muss

ich weiss nicht ob ich den satz nur nicht verstehe...
aber was genau willst du machen und von welchem kopierten code redest du?
 
Werbung:
überarbeiten musst du alle Seiten auf jeden Fall :D
Du musst ja in internen Bereichen immer prüfen, ob der Benutzer eingeloggt ist oder nicht. Desweiteren musst du ja auch auf jeder Seite ein session_start() schreiben. Aber es gibt den feinen include Befehl ;)
Heisst du shreibst den Teil einmal und inkludierst den in den restlichen Dateien.
Falls du auch ein Login hast, das auf jeder Seite sein soll, musst du den Part auch einzelnd schreiben und den dann auch inkludieren.
 
leg die seiten ausserhalb des webroots.
Klingt gut. :) Aber auch mal die Erklärung warum, für die die nicht wissen wieso. Der User hat Zugriff auf einen bestimmten "Ordner" mit allen Unterordnern.
Könnte bei einem Windowssystem zum Beispiel

C:/Webserver/Seiten/

Das wäre dann die sogenannte root Ebene. Der Benutzer kann nicht auf die Dateien im Ordner Webserver oder gar auf Ordner und Dateien auf C: zugreifen.

Somit sollte man sich zum Beispiel einen Ordner im Webserver ordner anlegen der zum Beispiel: Siteparts heisst. Denn die einzelnen Teilseiten sollen ja nicht vom Benutzer alleine aufgerufen werden können. (Besonders nicht wenn es interne Seiten sind). das PHP include kommt im Gegensatz zu dem Webbrowser auf höher liegende Ebenen (Wenn es vom Dateisystem erlaubt ist) Somit wäre ein include_once "../Siteparts/nachrichten.php"; Außerhalb des Bereiches, der vom Browser aufgerufen werden kann.
 
Werbung:
Ich hätte zu dem ganzen Thema sicherheit mal ne Frage:
Ich hab mir jetzt mal per (if)abfrage sowas ähnliches wie nen log in gebastelt.
Dabei geb ich imprinzip nen Username und en Passwort ein und wenn die beiden korrekt sind, leitets mich auf die nächste Seite weiter.
Jedoch könnte ich ja auch wenn ich die nächste Seite kenne, über die URL schon drauf ohne die Abfrage.
Kann man mit PHP prüfen, ob die Abfrage erfolgreich ausgeführt wurde?
Zurzeit ist das der folgende Aufbau:
Newsseite -> Um ne neue News zu schreiben gibts nen Link der auf die LogIn seite führt.
LogIn -> Es wird Username und Passwort eingegeben. Per post gehts dann auf eine Seite die die Eingabeb überprüft. Wenn dort alles ok ist, wird automatisch auf die Seite weitergeleitet, auf der man dann auch was machen kann.

Also imprinzip kann man jede Seite mit ner kurzen Abfrage ausstatten, ob der LogIn erfolgreich ausgeführt wurde?

Bin in der Hinsicht neueinsteiger, komme aber mit der Syntax aufgerund C# kenntnisse recht gut zurecht.

Schonmal vielen Dank!
Gruß Alexander
 
Das macht man mit einer Session.
Du setzt beim erfolgreichen Login eine Session variable. zum Beispiel: $_SESSION['user'] setzt du den username rein.
Fragst dann bei jeder internen Seite ab, ob diese Variable gesetzt ist. Falls ja, ist man angemeldet. Suche hier im Forum oder auch mal bei Google nach PHP Sessions. Dann wirst du herausfinden, wie man das macht :)
 
Werbung:
Fragst dann bei jeder internen Seite ab, ob diese Variable gesetzt ist. Falls ja, ist man angemeldet.

bei kleinen seiten im hobbybereich kann man sowas sicher machen, stell dir aber mal dieses szenario vor:

seite 1 legt eine session im tmp ordner ab.
angreifer nutzt session_id von seite 1 um auf seite 2 einen gesetzten namen zu erlangen.

ich lege idr. einen hash in der session ab, benutzername und passwort z.b. und prüfe die session im system nochmal.
 
das ist ein zusammenspiel aus session hijacking und der art wo und ob php die sessions zentral speichert.
 
Werbung:
Okay, warum ich frage: Wenn ein Angreifer die Session-ID eines anderen Nutzers kennt, dann kann er die an den Server schicken, woraufhin dieser (also PHP) die zugehörige Session-Datei lädt. Ob in dieser Session-Datei der Username, die User-ID oder ein Hash aus Username+Password steht, dürfte -- falls du da nicht noch irgendein Ass im Ärmel hast (oder ich mich derbe verhaue ;)) -- völlig gleichgültig sein. Du müsstest wenn in den Hash einen Wert packen, der eindeutig zum Rechner/Client des Nutzers gehört und den der Angreifer nicht reproduzieren (kennen) kann. Die IP wäre ein Beispiel, aber IPs können glaube ich unter Umständen dynamisch sein, was einen Nutzer dann eventuell unbeabsichtigt ausloggen könnte. Der Browserstring aus $_SERVER wäre eine andere Möglichkeit, aber der ist natürlich nur bedingt fälschungssicher.
 
was ist wenn die sessions von mehreren seiten am selben ort gespeichert werden und der angreifer sich auf seite a anmelden darf, auf seite b aber nicht? - zu berücksichtigen ist, dass die session_id von seite a dem benutzer bekannt ist. ihm ist es also ein leichtes die session von seite a seite b unterzujubeln.
 
Stimmt, das ist ein Argument, an das ich nicht gedacht habe...

Dazu müssten in etwa folgende Voraussetzungen erfüllt sein:

- Angreifer muss Webspace auf gleichem Server bekommen wie Opfer (sicher schwierig, aber bestimmt nicht unmöglich)
- Session-Dateien müssen in einem gemeinsamen Verzeichnis liegen und das Opfer muss auf Session-Dateien des Angreifers zugreifen können dürfen (das heißt wohl, PHP muss für beide unter demselben Benutzernamen laufen und das Opfer darf keinen abweichenden session_save_path eingestellt haben) (wäre dennoch ein ziemlicher grober Konfigurationsfehler des Hosters) (Edit: Nein, es ist tatsächlich ein Feature. ;))
- Angreifer muss den Namen des Indexes von $_SESSION korrekt erraten, unter dem das Opfer den Benutzernamen oder die ID eines eingeloggten Users speichert (trivial)

Ich würde gerne sagen, das Szenario ist völlig unwahrscheinlich (sonderlich wahrscheinlich ist es auch wirklich nicht), weil kein halbwegs ordentlicher Anbieter eine solche potentielle Sicherheitslücke zulässt, aber die Wahrheit ist: Bis vor einigen Monaten war mein Webspace, dessen Anbieter in nahezu jeder Auflistung ganz oben steht, höchstwahrscheinlich genau so konfiguriert. (Edit: Da lag ich falsch. Hoster stellen das absichtlich so ein und es ergibt sogar Sinn. Siehe unten. Mein Fehler.)

PS: Und Glückwunsch zum 1000. Beitrag. :)
 
Zuletzt bearbeitet:
Werbung:
irgendwie hast du noch nicht ganz verstanden.

ein std apache enthält diese konfiguration:

TMP C:\Windows\TEMP ( Windows )


@session_start();
$_SESSION['foo'] = 'bar';


-> eine Datei wird erstellt,

C:\Windows\TEMP\sess_[HASH]

darin ist zu sehen:

foo|s:3:"bar";

siehst du irgendwelche infos welche auf den host welcher darauf zugreifen kann zurückschließen?


d.h. jedes skript welches auf die selbe php.ini (egal welcher host) zurück greift, nutzt diesen tmp ordner.
(hier gibt es bei vhosts anpassungen wie basedir, tmp u.s.w.).

angenommen du betreibst 2 webseiten auf dem selben server, beide teilen sich ein tmp dir.

auf seite1 schreibst du sessions, gehst dann auf seite 2 und jubelst ihm die session_id von seite 1 (Cookie?) zu.... kannst dir denken was passiert?
 
Doch, ich habe das schon verstanden. Bei einem ordentlich konfigurierten Webhoster gehören die Dateien eines Kunden "kunde1" auch dem User "kunde1" und die eines Kunden "kunde2" dem User "kunde2". Lese- und Schreibrechte sind jeweils exklusiv. Das von dir angesprochene Problem ergibt sich theoretisch nur dann, wenn alles Zeugs gleichermaßen "www-run" (oder so) gehört, weil etwa PHP als "www-run" ausgeführt wird. (So war's offenbar bis vor kurzem bei meinem allinkl-Space, was ich gerade ziemlich erbärmlich finde.)

Wenn du tatsächlich meinst, dass *man selbst* zwei verschiedene Seiten auf einem Server betreibt, kann ich nur sagen: Wer dann nicht auf die Idee kommt, unterschiedliche session_save_paths einzustellen, hat es nicht besser verdient. ;)


Edit: Hmmm... Vielleicht checke ich es doch nicht. Gerade festgestellt, dass doch von PHP neu erstellte Dateien immer noch wwwrun:nogroup gehören.
 
Zuletzt bearbeitet:
ich entwickel eine php anwendung die sicher ist, nicht eine die auf genau dem server sicher ist :)

ob du hier oder da rum schraubst, generell traue ich inhalten aus sessions nicht und überprüfe auch diese.
vielleicht bin ich da etwas paranoid, aber sicher ist sicher :)
 
Werbung:
Ja, ich halte es auch für eine gute Sache, den zusätzlichen Session-Eintrag hinzuzufügen. Das und auf jeden Fall auch ein eigener Session-Save-Path im eigenen Verzeichnis außerhalb des Docroots. Das ist dann so sicher wie die Zugriffsrechte des Dateisystems des Servers. (Wenn die nicht passen, ist eh Land unter.)

Ich habe inzwischen auch herausgefunden, was mich so verwirrt hat. Normalerweise werden Dateien bei mir von PHP als Nutzer phprun:nogroup erstellt -- und zwar von jedem Webspace-Account auf dem Server. Das heißt, das von dir angesprochene Session-Hijacking-Problem besteht definitiv, wenn man den Save-Path nicht anpasst. Als ich eben nachsah, gehörten aber alle von PHP erzeugten Dateien (hauptsächlich Caches) dem User mermshaus:mermshaus. Daher dachte ich, der Hoster hätte das irgendwie umgestellt und PHP liefe nun unter dem Benutzernamen. (Was gut für das Session-Problem wäre, aber schlecht für etwaige PHP-Sicherheitslücken. So kann PHP nämlich nur die Dateien verändern, die phprun gehören, wie es auf nem lokalen Linux standardmäßig auch ist.)

Die Dateien gehörten aber bloß deshalb mermshaus:mermshaus, weil ich sie beim Synchronisieren mit meinem FTP-User hochgeladen hatte und sie auf 777 standen und PHP sie deshalb nicht neu als phprun:nogroup erzeugen musste, sondern einfach in die vorhandenen Dateien schreiben konnte. :oops:

Dann hatte ich eine sehr amüsante "Wenn hier auf dem Server alle von PHP beschreibbaren Dateien phprun:nogroup gehören, können mir dann andere Leute nicht per PHP meine Daten überschreiben, wenn sie den absoluten Pfad wissen?"-Stunde, bis mir einfiel, dass es Konfigurationseinstellungen für open_basedir und disable_functions gibt.

Puh.

@trix0matrix9: Entschuldige bitte das "Kapern" des Threads... ;)
 
Zuletzt bearbeitet:
Okay das ist sicher ne sehr interessante diskussion, aber iwo hat mein wissen aufgehört. Ich frag mal andersrum. Die Sache mit der Session wäre sicher schonmal recht interessant für mich und umsetzbar. Da ich nur ne Homepage für meine Bandmache und im Adminbereich nur News geschrieben werden sollen bzw Bilder verwaltet werden sollen.
Wie viel komplexer wäre jetzt dieser ganze Sicherheitsstandart bzw zu was würdet ihr denn jetzt raten ?

Gruß Alex
 
Zurück
Oben