Preserve X-Frame-Options if it was already set

This commit is contained in:
Ryan Brandenburg 2016-04-18 11:29:42 -07:00
parent 6099dfa261
commit fd81151d31
2 changed files with 26 additions and 1 deletions

View File

@ -248,7 +248,7 @@ namespace Microsoft.AspNetCore.Antiforgery.Internal
_tokenStore.SaveCookieToken(httpContext, cookieToken);
}
if (!_options.SuppressXFrameOptionsHeader)
if (!_options.SuppressXFrameOptionsHeader && !httpContext.Response.Headers.ContainsKey("X-Frame-Options"))
{
// Adding X-Frame-Options header to prevent ClickJacking. See
// http://tools.ietf.org/html/draft-ietf-websec-x-frame-options-10

View File

@ -783,6 +783,31 @@ namespace Microsoft.AspNetCore.Antiforgery.Internal
Times.Never);
}
[Fact]
public void SetCookieTokenAndHeader_PreserveXFrameOptionsHeader()
{
// Arrange
var options = new AntiforgeryOptions();
var antiforgeryFeature = new AntiforgeryFeature();
var expectedHeaderValue = "DIFFERENTORIGIN";
// Generate a new cookie.
var context = CreateMockContext(
options,
useOldCookie: false,
isOldCookieValid: false,
antiforgeryFeature: antiforgeryFeature);
var antiforgery = GetAntiforgery(context);
context.HttpContext.Response.Headers["X-Frame-Options"] = expectedHeaderValue;
// Act
antiforgery.SetCookieTokenAndHeader(context.HttpContext);
// Assert
var xFrameOptions = context.HttpContext.Response.Headers["X-Frame-Options"];
Assert.Equal(expectedHeaderValue, xFrameOptions);
}
[Theory]
[InlineData(false, "SAMEORIGIN")]
[InlineData(true, null)]