|
|
|
@ -33,7 +33,7 @@ public class AbpSecurityHeadersMiddleware : IMiddleware, ITransientDependency |
|
|
|
|
|
|
|
var requestAcceptTypeHtml = context.Request.Headers["Accept"].Any(x => |
|
|
|
x!.Contains("text/html") || x.Contains("*/*") || x.Contains("application/xhtml+xml")); |
|
|
|
|
|
|
|
|
|
|
|
var endpoint = context.GetEndpoint(); |
|
|
|
|
|
|
|
if (endpoint?.Metadata.GetMetadata<IgnoreAbpSecurityHeaderAttribute>() != null) |
|
|
|
@ -42,11 +42,11 @@ public class AbpSecurityHeadersMiddleware : IMiddleware, ITransientDependency |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (!requestAcceptTypeHtml |
|
|
|
|| !Options.Value.UseContentSecurityPolicyHeader |
|
|
|
|| await AlwaysIgnoreContentTypes(context) |
|
|
|
if (!requestAcceptTypeHtml |
|
|
|
|| !Options.Value.UseContentSecurityPolicyHeader |
|
|
|
|| await AlwaysIgnoreContentTypes(context) |
|
|
|
|| endpoint == null |
|
|
|
|| Options.Value.IgnoredScriptNoncePaths.Any(x => context.Request.Path.StartsWithSegments(x.EnsureStartsWith('/')))) |
|
|
|
|| Options.Value.IgnoredScriptNoncePaths.Any(x => context.Request.Path.StartsWithSegments(x.EnsureStartsWith('/'), StringComparison.OrdinalIgnoreCase))) |
|
|
|
{ |
|
|
|
AddOtherHeaders(context); |
|
|
|
await next.Invoke(context); |
|
|
|
@ -71,7 +71,7 @@ public class AbpSecurityHeadersMiddleware : IMiddleware, ITransientDependency |
|
|
|
{ |
|
|
|
return Task.CompletedTask; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (context.Response.StatusCode is < 200 or > 299) |
|
|
|
{ |
|
|
|
return Task.CompletedTask; |
|
|
|
@ -85,7 +85,7 @@ public class AbpSecurityHeadersMiddleware : IMiddleware, ITransientDependency |
|
|
|
AddOtherHeaders(context); |
|
|
|
await next.Invoke(context); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private async Task<bool> AlwaysIgnoreContentTypes(HttpContext context) |
|
|
|
{ |
|
|
|
foreach (var selector in Options.Value.IgnoredScriptNonceSelectors) |
|
|
|
@ -95,7 +95,7 @@ public class AbpSecurityHeadersMiddleware : IMiddleware, ITransientDependency |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
@ -130,7 +130,7 @@ public class AbpSecurityHeadersMiddleware : IMiddleware, ITransientDependency |
|
|
|
var newScriptSrcValue = scriptSrcValue + nonceStr; |
|
|
|
return Options.Value.ContentSecurityPolicyValue!.Replace(scriptSrcValue!, newScriptSrcValue); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected virtual void AddHeader(HttpContext context, string key, string value, bool overrideIfExists = false) |
|
|
|
{ |
|
|
|
@ -142,4 +142,4 @@ public class AbpSecurityHeadersMiddleware : IMiddleware, ITransientDependency |
|
|
|
|
|
|
|
context.Response.Headers.AddIfNotContains(new KeyValuePair<string, StringValues>(key, value)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|