diff --git a/resources/views/admin/platform_orders/form.blade.php b/resources/views/admin/platform_orders/form.blade.php index 43b98f6..a235f15 100644 --- a/resources/views/admin/platform_orders/form.blade.php +++ b/resources/views/admin/platform_orders/form.blade.php @@ -132,18 +132,20 @@
@php $incomingBack = (string) ($defaults['back'] ?? ''); - // 为避免 & 被 Blade escape 成 & 导致回退上下文丢失,这里需要原样输出 href。 - // 安全护栏:必须为站内相对路径,并拒绝引号/尖括号,降低 XSS 风险。 - $safeBack = (str_starts_with($incomingBack, '/') - && !preg_match('/["\'<>]/', $incomingBack) - // back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀) - && !preg_match('/(?:^|[?&])back=/', $incomingBack)) + // back 安全护栏: + // - 仅允许站内相对路径(/ 开头) + // - 拒绝引号/尖括号 + // - 拒绝 nested back=(避免 URL 膨胀/绕过) + // 说明:此处 href 采用原样输出以避免 & 影响回链/断言。 + $safeBackForLinks = (str_starts_with($incomingBack, '/') + && !preg_match('/["\'<>]/', $incomingBack) + && !preg_match('/(?:^|[?&])back=/', $incomingBack)) ? $incomingBack : ''; @endphp - @if($safeBack) - 返回(保留上下文) + @if($safeBackForLinks !== '') + 返回(保留上下文) @else 返回 @endif