Skip to content

Commit def2af2

Browse files
fix: remove redundant sanitize_uri() on already-sanitized HTTP_REFERER
global.php:582 applies sanitize_uri() to $_SERVER['HTTP_REFERER'] on every request. Calling it again in link.php causes a second urldecode() pass, which can alter valid percent-encoded characters. Use the pre-sanitized value directly; the external-host guard remains. Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
1 parent dda066c commit def2af2

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

link.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,18 @@
3333
// Prevent redirect loops
3434
if (isset($_SERVER['HTTP_REFERER'])) {
3535
if (!str_contains($_SERVER['HTTP_REFERER'], 'link.php')) {
36-
$raw = sanitize_uri($_SERVER['HTTP_REFERER']);
36+
/* include/global.php already applied sanitize_uri() to HTTP_REFERER;
37+
* reject external hosts to prevent open-redirect via Referer. */
38+
$raw = $_SERVER['HTTP_REFERER'];
3739
$referer = (parse_url($raw, PHP_URL_HOST) === null || parse_url($raw, PHP_URL_HOST) === $_SERVER['HTTP_HOST']) ? $raw : 'index.php';
3840
$_SESSION['link_referer'] = $referer;
3941
} elseif (isset($_SESSION['link_referer'])) {
40-
$referer = sanitize_uri($_SESSION['link_referer']);
42+
$referer = $_SESSION['link_referer'];
4143
} else {
4244
$referer = 'index.php';
4345
}
4446
} elseif (isset($_SESSION['link_referer'])) {
45-
$referer = sanitize_uri($_SESSION['link_referer']);
47+
$referer = $_SESSION['link_referer'];
4648
} else {
4749
$referer = 'index.php';
4850
}

0 commit comments

Comments
 (0)