Mailinglisten-Archive |
Wolfgang Hauck wrote: >> [...] anbei die gewünschte >> literaische Abhandlung des von Ihnen gewünschten Themas... >> >> http://www.acros.si/papers/session_fixation.pdf Hallo zusammen, habe das paper zwar schon vor einem halben jahr gelesen, jedoch bin ich jetzt erst dazu gekommen, die beschriebenen probleme rudimentär zu lösen. an dieser stelle ein riesen dank an wolfgang, für diesen sehr sehr guten link! herausgekommen ist folgender InterceptingFilter, der ziemlich straight-forward sein sollte und keiner weiteren erklärung bedarf. nur eines: das request-object kapselt die GPC-variablen, bei portierung in die eigene php-applikation müsste man also $_GET,$_POST, und $_COOKIE auf die variable "SID" checken, oder wie immer ihr die nennt ... <?php class SessionFilter extends InterceptingFilter { function preProcess() { session_name('SID'); session_id($this->getValidSID()); session_start(); echo 'SID:'.session_id().'<br />'; } /* prevents session-fixation attacks */ function getValidSID() { $requestedSID = $this->request->get('SID'); // invalid structure if (!preg_match('°^[0-9a-z]{32}$°' , $requestedSID)) return $this->generateSID(); $sessionDirName = ini_get('session.save_path'); $sessionFileName = realpath($sessionDirName.'/sess_'.$requestedSID); // someone tries to trick the session-management by providing a filesystem-path instead of a SID if (substr($sessionFileName , 0 , strlen($sessionDirName)) != $sessionDirName) return $this->generateSID(); // session-file does not exist yet, someone tries to "fixate" a new session if (!is_file($sessionFileName) || !is_readable($sessionFileName)) return $this->generateSID(); return $requestedSID; } function generateSID() { return md5(uniqid(rand() , true)); } } ?> nur als wiedererinnerung an das thema gedacht, kai p.s. ist das problem eigentlich noch aktuell oder bereits gefixt ?
php::bar PHP Wiki - Listenarchive