From 68bc21353a6138a898724c8bb87684bb2b6b2c1c Mon Sep 17 00:00:00 2001 From: VirtualTam Date: Thu, 3 Sep 2015 23:12:58 +0200 Subject: Session ID: extend the regex to match possible hash representations Improves #306 Relates to #335 & #336 Duplicated by #339 Issues: - PHP regenerates the session ID if it is not compliant - the regex checking the session ID does not cover all cases - different algorithms: md5, sha1, sha256, etc. - bit representations: 4, 5, 6 Fix: - `index.php`: - remove `uniqid()` usage - call `session_regenerate_id()` if an invalid cookie is detected - regex: support all possible characters - '[a-zA-Z,-]{2,128}' - tests: add coverage for all algorithms & bit representations See: - http://php.net/manual/en/session.configuration.php#ini.session.hash-function - https://secure.php.net/manual/en/session.configuration.php#ini.session.hash-bits-per-character - http://php.net/manual/en/function.session-id.php - http://php.net/manual/en/function.session-regenerate-id.php - http://php.net/manual/en/function.hash-algos.php Signed-off-by: VirtualTam --- application/Utils.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'application/Utils.php') diff --git a/application/Utils.php b/application/Utils.php index cb03f11c..1422961d 100755 --- a/application/Utils.php +++ b/application/Utils.php @@ -140,11 +140,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 +161,7 @@ function is_session_id_valid($sessionId) return false; } - if (!preg_match('/^[a-z0-9]{2,32}$/i', $sessionId)) { + if (!preg_match('/^[a-zA-Z0-9,-]{2,128}$/', $sessionId)) { return false; } -- cgit v1.2.3