Skip to content

Commit 53da3f8

Browse files
Use local redirect target for www->apex
Build redirect target from PathString/QueryString instead of interpolating an absolute URL with request-derived segments. This preserves permanent redirect behavior while resolving the CodeQL unvalidated URL redirection finding.
1 parent 2a35263 commit 53da3f8

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

EssentialCSharp.Web/Program.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,6 @@ await context.HttpContext.Response.WriteAsync(
453453
? configuredBaseUri.Host[4..]
454454
: configuredBaseUri.Host;
455455
string wwwHost = $"www.{apexHost}";
456-
string redirectAuthority = new UriBuilder(configuredBaseUri) { Host = apexHost }.Uri.GetLeftPart(UriPartial.Authority);
457456

458457
app.UseExceptionHandler(exceptionApp =>
459458
{
@@ -525,8 +524,9 @@ await McpJsonRpcResponseWriter.WriteErrorAsync(
525524
{
526525
if (string.Equals(context.Request.Host.Host, wwwHost, StringComparison.OrdinalIgnoreCase))
527526
{
528-
string redirectUrl = $"{redirectAuthority}{context.Request.PathBase}{context.Request.Path}{context.Request.QueryString}";
529-
context.Response.Redirect(redirectUrl, permanent: true);
527+
PathString redirectPath = context.Request.PathBase.Add(context.Request.Path);
528+
string redirectTarget = $"{redirectPath}{context.Request.QueryString}";
529+
context.Response.Redirect(redirectTarget, permanent: true);
530530
return;
531531
}
532532
await next(context);

0 commit comments

Comments
 (0)