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