PHP sicher oder nicht?

Rain

Lieutenant
Registriert
Mai 2003
Beiträge
704
Hallo,

ich bin derzeit beschäftigt ein Dispositions-System mit PHP und MySQL zu erstellen. Der Entwicklungsprozess verläuft auch prima soweit. Es soll dabei verschiedene User geben wie "normale Benutzer", "benutzer mit schreibrechten", "admin" ... usw.

als "admin" ist es möglich, user zu löschen, den status von usern zu verändern, datenbanken zu ändern usw usf .. das übliche halt. bis jetzt hab ich es so gelöst, dass in den admin-seiten eine einfache abfrage als erstes stand:

PHP:
if ($_SESSION['typ']=="admin") {
// ADMIN-OPTIONEN
}

zB sollen so die Admin-Links included werden. Auch bei jeder Admin-relevanten Seite habe ich so eine Abfrage.

Meine Frage dazu ist:

Ist das prinzipiell so erst mal recht sicher oder lässt sich das problemlos umgehen?
 
Das kommt auf den Code drumherum an.

Wenn die Benutzerauthentifizierung sicher gelöst ist, Session-Hijacking ausgeschlossen bzw. erschwert ist, dann sollte der Programmcode oben sicher sein.

Wichtig ist nur, dass die inkludierten Scripte ebenfalls eine Prüfung enthalten (insb. beim Ausführen von Befehlen). Sonst könnten findige Leute die auch direkt aufrufen.
 
na bei den includierten sachen würde ich die abfrage einfach noch mal machen.

Die Session handhabe ich bei einem logout so:

PHP:
session_regenerate_id();
session_destroy();

Bei der Benutzererstellung und -anmeldung können nicht über normale Wege die Adminrechte erworben werden
 
Verwendest du https-Verschlüsselung?
Verwendest Du Cookie-basiertes Sessionhandling (in Verbindung mit https ist damit die SessionID verschlüsselt und die Sicherheits ehr hoch)?
 
jeweils nein... hab mit https noch nix zu tun gehabt. lässt sich der übertragungsweg denn ohne https problemlos "abhören" ?

Cookies verwende ich auch nicht, ist schon ok, wenn man sich jedesmal neu einloggen muss


// EDIT: Ok, blöde frage mit dem abhören, ich belese mich mal und versuch es anzuwenden
 
Zuletzt bearbeitet:
Zu 1: Ohne https kann jeder, der Zugang zu einem der Router über die deine Datenpakete geschickt werden, die Inhalte lesen. Die stehen da so im Klartext (auch Benutzername und Passwort). Besonders schlimm in Firmennetzwerken, wo solche Zugriffe für entsprechendes Personal (Netzwerkadmins) einfach sind.

Zu 2: Ich meinte damit die Übermittlung der Session-ID. Entweder sie wird via GET/URL-Parameter übermittelt (www.deineseite.de/produkta.php?sessionid=afgh3h2j2212313) oder sie wird eben in einem Cookie für die Dauer der Browsersitzung abgelegt.

Wenn die Session-ID per URL übermittelt wird, ist das extrem unsicher: Wenn jemand die URL im Browserverlauf (oder einen Router in der Mitte) herausfindet, kommt man über die URL in das Profil des Benutzers mit all seinen Rechten (als hätte man sich selbst angemeldet).

Bei Cookies ist das etwas schwieriger, weil diese nicht in der URL übermittelt werden.

In Verbindung mit https sollten Cookies relativ sicher sein (wobei es auch hier noch Methoden gibt).
 
Dein Script ist schon normal sicher.

Du könntest auch zusätzlich noch die includierten scripte in *.inc o.ä. umbenennen und/oder in einen Unterordner verschieben, dann per .htaccess Dateiendung und/oder Verzeichnis öffentlich blocken.

Statt alles in $_SESSION abzulegen, könntest Du auch per DB lösen. Und nur mit der "session-id" arbeiten. Damit kannst Du auch das timeout und vieles mehr per script überwachen und direkter kontrollieren, über mehrere angemeldete user hinweg verarbeiten.
Ich fahre diese Kombilösung schon länger und finde sie für meine bisherigen Anforderungen flexibler.

100% Sicherheit gibt es natürlich keine.
Unsicher sind session-id und userdaten vorallem in cookie oder GET.
 
nun, die ganze sache ist noch voll in der entwicklung und noch nicht online. ich benutze xampp um nen lokalen webserver zu erstellen, auf welchen ich alles teste. xampp ist ja sehr offen vorkonfiguriert, soweit ich gelesen habe.

um ehrlich zu sein, ich schicke die session id weder per get noch über n cookie mit. allerdings befinden sich im tmp-verzeichnis von xampp dateien wie: "sess_c661ca745038d7de5de3c14443b3d1654ceb2e91" .. möglicherweise ist dass das cookie?

soweit ich gesehen habe, ist SSL aktiviert, reicht es aus, wenn ich da einfach eine automatische weiterleitung von "http://.../index.php" auf "https://.../index.php" einrichte um die übertragung zu verschlüsseln, oder sind weitere einstellungen notwendig?
 
Also wenn du die Session-ID nicht in der Browser-URL siehst (mit deinen Augen, in der Adressleiste), dann wird sie via Cookie (sogenanntes Sessioncookie) übermittelt. Die Dateien die du da siehst gehören zur serverseitigen Sessionverwaltung.

SSL: Ja das reicht aus; ich würde evtl. noch über ein Zertifikat nachdenken (gibt auch günstige für 79EUR pro Jahr) - das kannst du dann aber über den Hoster abwickeln.
 
und dieses serverseitige sessionverwaltungscookie ist meiner vermutung nach als relativ sicher zu sehen, oder?

Was es mit Zertifikaten auf sich hat, da muss ich mich erst nochmal belesen ;) Das Thema Sicherheit ist leider ziemliches Neuland für mich, aber notwendig, denn das ganze mache ich ja nicht privat für mich
 
Es kommt auch ein bisschen auf die Sicherheitsanforderungen, Wertigkeit und Begehrlichkeit der Daten an.
Wie hoch die Sicherheit für Dein Dispositionssystem sein muss, kann ich nicht einschätzen. Vielleicht solltest Du die Anforderungen nochmal mit den verantwortlichen Personen zusammen durchsprechen?
Bei vielen kleineren Geschichten halte ich SSL schon für etwas overkill.
 
naja, es geht halt um die gesamte Organisation der Firma. Auch um Adressen, Telefondaten usw. .. also es sollte schon ein Maß an Sicherheit vorhanden sein. Als hochsensibel würde ich die Daten aber dennoch nicht einschätzen
 
@relict: Stimmt schon, dass SSL bisschen viel ist. Aber man sollte dessen Mächtigkeit im Zusammenspiel mit Session-Cookies nicht unterschätzen.

Die meisten Provider bieten https auch schon mit an, damit sollte es gegessen sein.
 
und ich hab jetzt auch ein besseres gefühl im bauch ;) danke für eure antworten!
 
Zurück
Oben