Manchmal wird man einfach nicht schlau aus den Post die im Internet zum Thema PHP Session Sicherheit gemacht werden.
Dabei kann es so einfach sein, mit wenigen Mitteln, einigermaßen Sicherheit zu bekommen.
Welche Gefahren bestehen den wenn man SESSIONs benutzt?
Nunja, alle SESSION Daten des Users können geklaut werden. Was bringt dem Angreifer das?
Ein wirklich gute Frage.
Eine Session sollte(!) keine Passwörter enthalten -> können nicht gestohlen werden.
Eine Session sollte nur Daten beinhalten die für den Angreifer eigentlich uninteressant sind, niemals sensible Daten.

Aber der Angreifer kann die SESSION auch fortsetzen, das ist wohl das eigentliche Problem, das heißt Userdaten können manipuliert werden, ungewollte Einkäufe getätigt oder – wenns richtig dumm läuft die vorgespeicherten Kreditkartendaten ausgelesen werden.
Wie kann man dem also vorbeugen:

____________________________________________________

English:

This Post contains a few tips to make easy PHP SESSION secure. Sometime you only find confusing Post, so I decide to make a very small list…

____________________________________________________

____________________________________________________
Ein gutes, einfaches und sehr schlichtes Mittel ist:

(Just a easy and simple solution)

1)
session_start();
session_regenerate_id(TRUE);

Die SESSION id wird gleich geändert beim Start, der Angreifer hat nicht viel Zeit darauf zu reagieren. Nachteil, der Refreshbutton schmeißt auch eure normalen User aus der SESSION.

(The Session id will change at the begin. The attacker has no mutch time to handle it. The only bad thing is that the refreshbutton will kick out the normale user too.)

_____________________________________________________
2. Ein zweiter hilfreicher „Trick“ ist wohl das benutzen von:
(second trick)

if(empty($_SESSION['Uni_K']))
{
$_SESSION = array();//nicht das das was unerwünschtes mitkommt
$_SESSION['Uni_K'] = uniqid();
}
if(empty($_REQUEST['Uni_K']))
{
Hier wird zum erstenmal zugegriffen, Herkunft unbekannt
}elseif($_REQUEST['Uni'] !== $_SESSION['Uni_K'])
{
// vorsicht nicht erlaubt
}else
{
//jetzt kanns losgehn
}

Danach(After):
output_add_rewrite_var ('Uni',$_SESSION['Uni_K']);

Was hier bedacht wurde: das $_REQUEST Problem,
denn REQUEST enthällt ebenfalls Cookiedaten.
Der Angreifer müsste also die Session stehlen und dann ein Cookie erzeugen der diesen REQUEST übernimmt, es ist daher anzuraten den SESSION Key von dem REQUEST key zu unterscheiden und einen anderen Namen zu geben, das macht es dem Angreifer eigentlich unmöglich den richtigen $_REQUEST Key zu finden (außer bei opensource 😉 )

(The thoughts about the $_REQUEST Problem just bring me to this solution: the keys are just differ. With this solution its easy to make your Session a bit saver)
__________________________________________________
3)
Zudem könnte man für eine SESSION einen SESSION_SANITY_KEY bilden aus $_SERVERinformationen
(You can use a SESSION_SANITY_KEY, too. You can build it with $_SERVER informations)

__________________________________________________
4) Für Programmierer die es noch sicher brauchen empfehle ich den
Save_handler den php bereitstellt.

– For more securty you can use the php included Save Handler

Eine Quelle phpforum

php sicherheit

Februar 26, 2009

Hi,
ich bin gerade darauf gestoßen: Sicherheit
Ich denke ein sehr interesanter Vortrag und es lohnt sich auf jeden Fall ihn durchzulesen.