diff --git a/app/Http/Controllers/Admin/PlatformOrderController.php b/app/Http/Controllers/Admin/PlatformOrderController.php index b635d20..152ad44 100644 --- a/app/Http/Controllers/Admin/PlatformOrderController.php +++ b/app/Http/Controllers/Admin/PlatformOrderController.php @@ -8,6 +8,7 @@ use App\Models\Merchant; use App\Models\Plan; use App\Models\PlatformOrder; use App\Models\SiteSubscription; +use App\Support\BackUrl; use App\Support\SubscriptionActivationService; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\RedirectResponse; @@ -47,12 +48,7 @@ class PlatformOrderController extends Controller // back 安全阀:必须为站内相对路径,并拒绝引号/尖括号。 // 说明:form 页会把 defaults.back 透传到 hidden input 与返回按钮;因此这里提前清洗,避免 unsafe back 在页面中出现。 $incomingBack = (string) ($defaults['back'] ?? ''); - $defaults['back'] = (str_starts_with($incomingBack, '/') - && !preg_match('/["\'<>]/', $incomingBack) - // back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀) - && !preg_match('/(?:^|[?&])back=/', $incomingBack)) - ? $incomingBack - : ''; + $defaults['back'] = BackUrl::sanitizeForLinks($incomingBack); $siteSubscription = null; $siteSubscriptionId = (int) ($defaults['site_subscription_id'] ?? 0); @@ -153,13 +149,8 @@ class PlatformOrderController extends Controller } $back = (string) ($data['back'] ?? ''); - // back 需为站内相对路径,并拒绝引号/尖括号,避免在后续页面以 `{!! !!}` 原样输出时引入 XSS 风险。 - $safeBack = (str_starts_with($back, '/') - && !preg_match('/["\'<>]/', $back) - // back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀) - && !preg_match('/(?:^|[?&])back=/', $back)) - ? $back - : ''; + // back 安全护栏:统一收敛到 BackUrl::sanitizeForLinks,避免口径漂移。 + $safeBack = BackUrl::sanitizeForLinks($back); $redirectUrl = '/admin/platform-orders/' . $order->id; if ($safeBack !== '') {