Hi erstmal, ich bin neu hier
Also, nun gleich mal zu meinem Anliegen:
Ich bin momentan dabei, ein CMS zu coden, und wollte mal die Meinung von ein paar Experten zwecks Sicherheit im Bereich Session's einholen. Speziell im Fall, wenn SID's durch GET übertragen werden.
Mein Session-System ist momentan eine Klasse, die nicht das Session-System von PHP verwendet, sonders selber die Art der SID-Übermittlung bestimmt, SID's erzeugt und direkt an mySQL angebunden ist. Momentan überprüfe ich folgendes, um festzustellen, ob die SID geklaut wurde oder nicht:
$REMOTE_ADDR mit der in der DB gespeicherten IP.
Pauschal gesehn ziemlich sicher, bis auf die Randgruppe der AOL-User, die ja über ein Proxy-Netzwerk surfen (verwendet AOL das eigentlich für "Marktforschungs"-Zwecke ? )
Wenn der 1. Check eben deshalb fehlschlägt, werden die ersten 3 Stellen der IP-Adresse verglichen (AOL-Proxy-User haben stets 195.93.60.xxx ,das hab ich durch nächtelanges in Logs wühlen bestätigen können) und zusätzlich noch den $HTTP_USER_AGENT
Wenn die SID durch Cookies übertragen wird, verfahre ich übrigens genauso. Und die bekanntesten Bots kriegen garnicht erst ne SID sondern werden nur über die IP und den $HTTP_USER_AGENT wiedererkannt.
Mir ist bewusst, dass damit ein AOL-User einem anderen die Kekse klauen könnte, wenn beide den selben $HTTP_USER_AGENT haben und beide nur per GET übertragen können.
Meine Frage deshalb: Wie kann man das ganze noch verfeinern, damit man den möglich Diebstahl noch schwerer machen kann (unmöglich gibts nicht, ich weiss)
Ein kleines 2. noch:
Ist das zur Erzeugung der SID zufällig genug ?
(Und noch ein paar anmerkungen für die PHP-Experten, die mich erstmal fragen werden, wie es mit der restlichen Sicherheit aussieht: [Ich kenn euch ]
Ich validiere JEDEN Input, [ _GET _POST _COOKIE und _SERVER ] den ich auch wirklich benötige auf SQL-Injections, durchaus auch rekursiv bei übergebenen Array's und auf den zu erwartenden Datentyp.
ist selbstmord, deshalb benutz ich das auch nicht.
Und: Meine Scripte laufen bei register_globals OFF, auch wenn sich das oben nicht ganz so herausliest. Wenn ein Provider das auf ON hat, setz ich, wenn möglich schnell einen .htaccess in den Document Root, um den Misstand zu beheben.
Soviel dazu )
Also, nun gleich mal zu meinem Anliegen:
Ich bin momentan dabei, ein CMS zu coden, und wollte mal die Meinung von ein paar Experten zwecks Sicherheit im Bereich Session's einholen. Speziell im Fall, wenn SID's durch GET übertragen werden.
Mein Session-System ist momentan eine Klasse, die nicht das Session-System von PHP verwendet, sonders selber die Art der SID-Übermittlung bestimmt, SID's erzeugt und direkt an mySQL angebunden ist. Momentan überprüfe ich folgendes, um festzustellen, ob die SID geklaut wurde oder nicht:
$REMOTE_ADDR mit der in der DB gespeicherten IP.
Pauschal gesehn ziemlich sicher, bis auf die Randgruppe der AOL-User, die ja über ein Proxy-Netzwerk surfen (verwendet AOL das eigentlich für "Marktforschungs"-Zwecke ? )
Wenn der 1. Check eben deshalb fehlschlägt, werden die ersten 3 Stellen der IP-Adresse verglichen (AOL-Proxy-User haben stets 195.93.60.xxx ,das hab ich durch nächtelanges in Logs wühlen bestätigen können) und zusätzlich noch den $HTTP_USER_AGENT
Wenn die SID durch Cookies übertragen wird, verfahre ich übrigens genauso. Und die bekanntesten Bots kriegen garnicht erst ne SID sondern werden nur über die IP und den $HTTP_USER_AGENT wiedererkannt.
Mir ist bewusst, dass damit ein AOL-User einem anderen die Kekse klauen könnte, wenn beide den selben $HTTP_USER_AGENT haben und beide nur per GET übertragen können.
Meine Frage deshalb: Wie kann man das ganze noch verfeinern, damit man den möglich Diebstahl noch schwerer machen kann (unmöglich gibts nicht, ich weiss)
Ein kleines 2. noch:
PHP-Code:
function makeSessID() {
mt_srand(microtime() * 1000000);
$this->SID = md5(uniqid(mt_rand()));
}
(Und noch ein paar anmerkungen für die PHP-Experten, die mich erstmal fragen werden, wie es mit der restlichen Sicherheit aussieht: [Ich kenn euch ]
Ich validiere JEDEN Input, [ _GET _POST _COOKIE und _SERVER ] den ich auch wirklich benötige auf SQL-Injections, durchaus auch rekursiv bei übergebenen Array's und auf den zu erwartenden Datentyp.
PHP-Code:
include($_GET['site']);
Und: Meine Scripte laufen bei register_globals OFF, auch wenn sich das oben nicht ganz so herausliest. Wenn ein Provider das auf ON hat, setz ich, wenn möglich schnell einen .htaccess in den Document Root, um den Misstand zu beheben.
Soviel dazu )
Kommentar