PHP Sessions - suche Spezialisten zur Beantwortung einer Frage!

CPU

Lieutenant
Registriert
Jan. 2006
Beiträge
704
Hallo zusammen,

was Loginbereiche angeht, da kenne ich mich ein wenig aus. Vor etwa 2 Jahren habe ich mein eigenes "Loginsystem" gebaut, das auf Cookies und IP des Clienten aufbaut!

Nun habe ich jedoch einige Fragen zu Sessions, da ich in Betracht ziehe, Sessions zu benutzen! (Die allgemeinen Dokus zu Sessions habe ich mir durchgelesen)

Sessions und Sicherheit
Ansich sollen Sessions ja sehr sicher sein, da nur eine Session-Id beim Benutzer die Daten auf dem Server gespeichert werden. Doch QuakeNet sagt folgendes:
Quakenet/#php Tutorial schrieb:
Da Sessions im Dateisystem normale Dateien sind und in /tmp/ abgelegt werden können sie von jedem PHP-Skript geladen werden oder sogar durch einen einfachen Texteditor auf dem Server. So kann ein Cracker den Inhalt der Session nach belieben verändern bzw. durch ein PHP-Skript auf den Server. Aber wenn der Cracker schon so weit im System ist hat man ganz andere Probleme als eine Session mit komische Daten...

Quelle: http://tut.php-quake.net/de/sessions.html
Ich verstehe nicht, was hier gemeint ist, dass der Hacker den Inhalt munter verändern kann. Wenn er an den Server rankommt, ist doch eh alles verloren, oder??
Reicht eine SessionId eigendlich aus (ändert diese sich während der Sitzung)? Natürlich würde ich auch über die Sitzungs-Ip gehen!!

Die Session-ID
Also in einem Tutorial stand, dass die Session-Id nur dann automatisch übergeben wird, wenn das irgendwo eingestellt ist. Ansonsten muss man die Session-Id immer automatisch mit dem Link übergeben.

Stimmt das? Was ist dazu zu sagen?

Meine "Produkte" sollen möglichst auf allen Servern (Servertypen mit den gängisten Konfigurationen) fehlerfrei laufen. Wie ist dies im Bezug auf die Session-Id und das automatisch Übergeben? Ist dies ein Standard???

Außerdem wäre ich Euch für eine Generaleinschätzung dankbar: Was haltet Ihr von Sessions, gibt es bessere Möglichkeiten (außer .htaccess)?

Vielen Dank schon mal vorab,
CPU :freaky:
 
CPU schrieb:
Ich verstehe nicht, was hier gemeint ist, dass der Hacker den Inhalt munter verändern kann. Wenn er an den Server rankommt, ist doch eh alles verloren, oder??

Ja, das steht doch aus so da, oder nicht?



Probleme mit Sessions könntest du auf Shared-Hostern bekommen, wenn du das globale Session-Verzeichnis benutzt. Da du dass aber nicht musst, würde ich unbedingt empfehlen einen eigenen (non-public) Ordner zu benutzen.



CPU schrieb:
Reicht eine SessionId eigendlich aus (ändert diese sich während der Sitzung)? Natürlich würde ich auch über die Sitzungs-Ip gehen!!

Warum Session-IP? Dass macht niemand, da Session Hijacking bei einem ordentlichen programmiertem Skript sehr unwahrscheinlich ist.


Wenn ein Hijacker mal zwischen Server und Client als Man-in-the-Middle sitzt, dann ist Session eh so gut wie übernommen, ob du mit Sitzungs-IPs arbeitest oder nicht.



Bei Sessions arbeitet man normalerweise mit Cookies und _nicht_ mit der SessionID in der URL. Falls die Session in der URL angegeben wird, ist ein Session Hijacking nämlich sehr viel wahrscheinlicher und nebenbei sieht es auch noch sehr hässlich aus.
 
Ich würde dir eine Kombination von Cookies und Session raten.
Somit kann, falls die SessionID über URL verlinkt wird, niemand 'zugelassen' werden, wenn er nur den Link hat. (okay cookies zu fälschen ist auch net so schwer, aber ich red mal vom prinzipiellen).

Ich zeig dir mal einen Ausschnitt meines Systems.
PHP:
if(isset($_SESSION["ID"]) AND isset($_SESSION["Time"]) AND isset($_SESSION["Secure"]) AND isset($_COOKIE["Secure"]) 
AND isset($_SESSION["TimeStamp"]) AND isset($_SESSION["User"]) AND isset($_SESSION["Rights"]))
	{
	if(isset($_SESSION["Secure"]) AND isset($_COOKIE["Secure"])
		AND isset($_SESSION["ID"]) AND $_COOKIE["Secure"] == $_SESSION["Secure"] 
		AND substr(strrchr($_SESSION["Secure"],"|"),1) == $_SERVER["REMOTE_ADDR"]
		AND SQL_Check($DataBase["User"],"Secure",$_SESSION["Secure"])
		AND ($Config["TimeStamp"] - $_SESSION["TimeStamp"]) < $Config["Curruption"]
		AND ($Config["TimeStamp"] - $_SESSION["Time"]) < $Config["Inactivity"])
			{
				$_SESSION["Time"] = $Config["TimeStamp"];
				$Logged = 1;
			} else 
			{	
				$Logged = 0;
			}
	} else	
	{	
		$Logged = 0;
	}
Überprüft wird ob mein 'Sicherheits'-Code (mit IP) mit dem Sicherheitscode in der Session und des Cookies übereinstimmen und der Datenbank.
Dann wird überprüft ob die IP im Sicherheitscode (ist ja egal welchen wenn die gleich sind) und der IP des Clienten überstimmt.

Und vielleicht kann hier jemand auch nebenbei sagen, ob das 'sicher' ist?
 
Zuletzt bearbeitet:
Eagle-PsyX- schrieb:
Und vielleicht kann hier jemand auch nebenbei sagen, ob das 'sicher' ist?


Imho nicht, weil du hier deine SessionID oder Secure Variable wasauchimmer sowohl in der URL, als auch im Cookie stehen hast. Wenn jemand also die URL hat, kann er sich dass Cookie ganz einfach zusammenbauen...


Was für einen Vorteil soll den deiner Meinung nach dieses System bringen, ich meine, was bringt es, in der URL die Session anzugeben, wenns über Cookies viel einfacher, besser und sicherer geht?
 
Also, zwei Sachen:

1.) Session-Ip
Damit meinte ich, dass man die aktuelle Sitzung mittels IP absichert! Also die Webapplikation nimmt nur Befehle entgegen von einem Account, wenn diese auch von der richtigen IP kommen!

2.) Session-Id-in-der-URL
Ich habe mal ne Frage: Ist eine Session-Id in der URL ein Muss? Oder kann man dies auch weglassen?


CPU
 
Zu 1: Sessions mit Cookies sind bereits recht sicher. Ich würde wetten, da gibt's eine Stellen in deiner Applikation, die wesentlich unsicherer sind. Mit einer "Session-IP" würde ich da nicht rumfuchteln.

Zu 2: Das wurde doch schon gesagt:
Bei Sessions arbeitet man normalerweise mit Cookies und _nicht_ mit der SessionID in der URL.
Du kannst dich selbst entscheiden, ob du Cookies, SID in URL oder beides benutzt. Ich benutze ausschließlich Cookies. Folgender Code bewirkt die ausschließliche Nutzung von Cookies:

PHP:
ini_set('session.use_cookies', '1');
ini_set('session.use_only_cookies', '1');
ini_set('session.use_trans_sid', '0');
 
@2.)
Das habe ich schon verstanden, doch ich meinte eigendlich (was ich nicht richtig formuliert habe), ob dies auf den meisten Webhostern funktioniert.

Kann ich z.B. bei Hosteurope die INI-Datei verändern?

CPU :)
 
Ja, bei Host Europe kannst du die entsprechenden Einstellungen vornehmen. Bei jedem anderen seriösen Hoster sollte dies auch möglich sein.
 
Nimm bloß keine IPs deine Nutzer werden es dir danken(Verbindungsabbruch, Proxy etc. führt sonst unweigerlich zu einem Rauswurf).
 
Darii schrieb:
Nimm bloß keine IPs deine Nutzer werden es dir danken(Verbindungsabbruch, Proxy etc. führt sonst unweigerlich zu einem Rauswurf).

Wo werde ich rausgeworfen??
 
Zurück
Oben