平台订单表单:统一safeBackForLinks护栏变量(去重)

This commit is contained in:
萝卜
2026-03-14 17:12:32 +00:00
parent 7a8170976f
commit de689a97d0

View File

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