X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=application%2FUtils.php;h=120333c560c93c29cf33a6e6175f829ae26ca6a4;hb=d01c234235411bafb97661d335fcb6ea1e67ffbc;hp=fa18f1588b278352554dbf85312980f4be6289e8;hpb=06b6660a7e8891c6e1c47815cf50ee5b2ef5f270;p=github%2Fshaarli%2FShaarli.git diff --git a/application/Utils.php b/application/Utils.php old mode 100644 new mode 100755 index fa18f158..120333c5 --- a/application/Utils.php +++ b/application/Utils.php @@ -97,12 +97,12 @@ function checkDateFormat($format, $string) */ function generateLocation($referer, $host, $loopTerms = array()) { - $final_referer = '?'; + $finalReferer = '?'; // No referer if it contains any value in $loopCriteria. foreach ($loopTerms as $value) { if (strpos($referer, $value) !== false) { - return $final_referer; + return $finalReferer; } } @@ -111,11 +111,12 @@ function generateLocation($referer, $host, $loopTerms = array()) $host = substr($host, 0, $pos); } - if (!empty($referer) && strpos(parse_url($referer, PHP_URL_HOST), $host) !== false) { - $final_referer = $referer; + $refererHost = parse_url($referer, PHP_URL_HOST); + if (!empty($referer) && (strpos($refererHost, $host) !== false || startsWith('?', $refererHost))) { + $finalReferer = $referer; } - return $final_referer; + return $finalReferer; } /** @@ -140,11 +141,16 @@ function checkPHPVersion($minVersion, $curVersion) /** * Validate session ID to prevent Full Path Disclosure. + * * See #298. + * The session ID's format depends on the hash algorithm set in PHP settings * * @param string $sessionId Session ID * * @return true if valid, false otherwise. + * + * @see http://php.net/manual/en/function.hash-algos.php + * @see http://php.net/manual/en/session.configuration.php */ function is_session_id_valid($sessionId) { @@ -156,7 +162,7 @@ function is_session_id_valid($sessionId) return false; } - if (!preg_match('/^[a-z0-9]{2,32}$/', $sessionId)) { + if (!preg_match('/^[a-zA-Z0-9,-]{2,128}$/', $sessionId)) { return false; }