Project

General

Profile

Actions

Bug #23407

closed

code issue in method getCookie()

Added by Michael Buergi over 14 years ago. Updated about 6 years ago.

Status:
Closed
Priority:
Should have
Category:
-
Target version:
-
Start date:
2010-08-19
Due date:
% Done:

0%

Estimated time:
TYPO3 Version:
4.4
PHP Version:
5.2
Tags:
Complexity:
Is Regression:
Sprint Focus:

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

typo3-v443dev-rev8635.patch (602 Bytes) typo3-v443dev-rev8635.patch Administrator Admin, 2010-08-20 17:27
bug_15503.patch (634 Bytes) bug_15503.patch Administrator Admin, 2010-10-06 10:49
Actions

Also available in: Atom PDF