fix(back): index 页 back 校验拒绝 nested back + 调整测试断言

This commit is contained in:
萝卜
2026-03-14 02:12:29 +00:00
parent 7479eb0e77
commit bb40ff692c
4 changed files with 27 additions and 7 deletions

View File

@@ -34,7 +34,10 @@
$incomingBack = (string) request()->query('back', '');
// 为避免 & 被 Blade escape 成 & 导致回退上下文丢失,这里需要原样输出 href。
// 安全护栏:必须为站内相对路径,并拒绝引号/尖括号,降低 XSS 风险。
$safeBack = (str_starts_with($incomingBack, '/') && !preg_match('/["\'<>]/', $incomingBack))
$safeBack = (str_starts_with($incomingBack, '/')
&& !preg_match('/["\'<>]/', $incomingBack)
// back 本身不应再包含 back避免无限嵌套导致 URL 膨胀)
&& !preg_match('/(?:^|[?&])back=/', $incomingBack))
? $incomingBack
: '';
@endphp
@@ -78,7 +81,10 @@
// “全部”:清空筛选,但保留 back用于返回来源页
$incomingBack = (string) request()->query('back', '');
$safeBack2 = (str_starts_with($incomingBack, '/') && !preg_match('/["\'<>]/', $incomingBack))
$safeBack2 = (str_starts_with($incomingBack, '/')
&& !preg_match('/["\'<>]/', $incomingBack)
// back 本身不应再包含 back避免无限嵌套导致 URL 膨胀)
&& !preg_match('/(?:^|[?&])back=/', $incomingBack))
? $incomingBack
: '';
$allUrl = '/admin/plans';