Bug #23407
closedcode issue in method getCookie()
0%
Description
There are two issues with the getCookie function in t3lib_userauth.php:
protected function getCookie($cookieName) { if (isset($_SERVER['HTTP_COOKIE'])) { $cookies = t3lib_div::trimExplode(';', $_SERVER['HTTP_COOKIE']); foreach ($cookies as $cookie) { list ($name, $value) = t3lib_div::trimExplode('=', $cookie); =1=> if ($name == $cookieName) { // Use the last one =2=> $cookieValue = stripslashes($value); } } } else { // Fallback if there is no HTTP_COOKIE, use original method: $cookieValue = isset($_COOKIE[$cookieName]) ? stripslashes($_COOKIE[$cookieName]) : ''; } return $cookieValue; }
=1=
Strings should be compared using strcmp(), as numeric strings are compared numeric. So cookie names like 1.23E3 wouldn't work.
=2=
should be $cookieValue = urldecode($value)
stripslashes() is not needed as $_SERVER is not affected by magic_quotes.
Original post has been translated by Steffen Gebert
Original post:
Bei der Durchsicht der Typo3-Datei /t3lib/class.t3lib_userauth.php habe ich ein paar kleine Fehler im Code entdeckt:
protected function getCookie($cookieName) {
if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = t3lib_div::trimExplode(';', $_SERVER['HTTP_COOKIE']);
foreach ($cookies as $cookie) {
list ($name, $value) = t3lib_div::trimExplode('=', $cookie);
=1=> if ($name == $cookieName) {
// Use the last one
=2=> $cookieValue = stripslashes($value);
}
}
} else {
// Fallback if there is no HTTP_COOKIE, use original method:
$cookieValue = isset($_COOKIE[$cookieName]) ? stripslashes($_COOKIE[$cookieName]) : '';
}
return $cookieValue;
}
1. Stelle:
Der "==" Operator vergleicht numerische Strings numerisch. Im allgemeinen Fall würde dieser Vergleich deshalb nicht für exotische Cookienamen wie z.B. "1.23E3" funktionieren. Ersatz: strcmp()
2. Stelle:
Die markierte Zeile sollte meiner Meinung nach so aussehen:
$cookieValue = urldecode($value);
"stripslashes" ist nicht nötig, da $_SERVER-Variablen von den magic quotes nicht beeinflusst werden und "urldecode" ist nötig, um den Wert zu dekodieren.
Im Falle der Sessions spielt dies in der Praxis natürlich keine Rolle. Eine kleine Optimierung wäre ebenfalls möglich: Der erste Aufruf von "trimExplode" kann durch das normale "explode" ersetzt werden.
Herzlichen Dank für Ihre Arbeit an typo3 und freundliche Grüsse
(issue imported from #M15503)
Files