Browse Source

Prevent breaking change

pull/16695/head
Salih 3 years ago
parent
commit
8cfe83edee
  1. 27
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/AbpSecurityHeadersMiddleware.cs
  2. 5
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/AbpSecurityHeadersOptions.cs

27
framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/AbpSecurityHeadersMiddleware.cs

@ -101,35 +101,28 @@ public class AbpSecurityHeadersMiddleware : IMiddleware, ITransientDependency
protected virtual string BuildContentSecurityPolicyValue(HttpContext context)
{
var cspValue = Options.Value.ContentSecurityPolicyValue.IsNullOrWhiteSpace() ? DefaultValue : Options.Value.ContentSecurityPolicyValue;
if (!(Options.Value.UseContentSecurityPolicyScriptNonce &&
context.Items.TryGetValue(AbpAspNetCoreConsts.ScriptNonceKey, out var nonce) &&
nonce is string nonceValue && !string.IsNullOrEmpty(nonceValue)))
{
return ContentSecurityPolicyValuesToCSPString();
return cspValue;
}
var scriptSrcValue = "";
if (Options.Value.ContentSecurityPolicyValues.TryGetValue(ScriptSrcKey, out var scriptSrc))
{
scriptSrcValue = string.Join(" ", scriptSrc);
}
scriptSrcValue += $" 'nonce-{nonceValue}'";
var nonceStr = $" 'nonce-{nonceValue}'";
return ContentSecurityPolicyValuesToCSPString(true) + $"; {ScriptSrcKey} {scriptSrcValue}";
}
var scriptSrcValue = Options.Value.ContentSecurityPolicyValue.Split(';')
.FirstOrDefault(x => x.Trim().StartsWith(ScriptSrcKey))?.Trim();
protected virtual string ContentSecurityPolicyValuesToCSPString(bool ignoreScriptSrc = false)
{
if (Options.Value.ContentSecurityPolicyValues.Any())
if (scriptSrcValue.IsNullOrWhiteSpace())
{
return string.Join("; ",
Options.Value.ContentSecurityPolicyValues.WhereIf(ignoreScriptSrc, x => x.Key != ScriptSrcKey)
.Select(x => $"{x.Key} {string.Join(" ", x.Value)}"));
return cspValue.EnsureEndsWith(';') + $" {ScriptSrcKey}{nonceStr};";
}
return DefaultValue;
var newScriptSrcValue = scriptSrcValue + nonceStr;
return Options.Value.ContentSecurityPolicyValue.Replace(scriptSrcValue, newScriptSrcValue);
}
protected virtual void AddHeader(HttpContext context, string key, string value, bool overrideIfExists = false)
{

5
framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/AbpSecurityHeadersOptions.cs

@ -10,8 +10,8 @@ public class AbpSecurityHeadersOptions
public bool UseContentSecurityPolicyHeader { get; set; }
public bool UseContentSecurityPolicyScriptNonce { get; set; }
public Dictionary<string, IEnumerable<string>> ContentSecurityPolicyValues { get; }
public string ContentSecurityPolicyValue { get; set; }
public Dictionary<string, string> Headers { get; }
@ -22,7 +22,6 @@ public class AbpSecurityHeadersOptions
public AbpSecurityHeadersOptions()
{
Headers = new Dictionary<string, string>();
ContentSecurityPolicyValues = new Dictionary<string, IEnumerable<string>>();
IgnoredScriptNonceSelectors = new List<Func<HttpContext, Task<bool>>>();
IgnoredScriptNoncePaths = new List<string>();
}

Loading…
Cancel
Save