|
@@ -50,6 +50,8 @@ final class FatalErrorHandlerTest extends TestCase
|
|
|
self::assertContains('X-Content-Type-Options: nosniff', $this->headers);
|
|
self::assertContains('X-Content-Type-Options: nosniff', $this->headers);
|
|
|
self::assertContains('X-Frame-Options: DENY', $this->headers);
|
|
self::assertContains('X-Frame-Options: DENY', $this->headers);
|
|
|
self::assertContains('Referrer-Policy: strict-origin-when-cross-origin', $this->headers);
|
|
self::assertContains('Referrer-Policy: strict-origin-when-cross-origin', $this->headers);
|
|
|
|
|
+ // R01-N25: Flash / Acrobat cross-domain policy lockout.
|
|
|
|
|
+ self::assertContains('X-Permitted-Cross-Domain-Policies: none', $this->headers);
|
|
|
self::assertContains(
|
|
self::assertContains(
|
|
|
'Strict-Transport-Security: max-age=31536000; includeSubDomains',
|
|
'Strict-Transport-Security: max-age=31536000; includeSubDomains',
|
|
|
$this->headers,
|
|
$this->headers,
|
|
@@ -196,11 +198,15 @@ final class FatalErrorHandlerTest extends TestCase
|
|
|
self::assertSame('nosniff', $h['X-Content-Type-Options']);
|
|
self::assertSame('nosniff', $h['X-Content-Type-Options']);
|
|
|
self::assertSame('DENY', $h['X-Frame-Options']);
|
|
self::assertSame('DENY', $h['X-Frame-Options']);
|
|
|
self::assertSame('strict-origin-when-cross-origin', $h['Referrer-Policy']);
|
|
self::assertSame('strict-origin-when-cross-origin', $h['Referrer-Policy']);
|
|
|
|
|
+ self::assertSame('none', $h['X-Permitted-Cross-Domain-Policies']);
|
|
|
self::assertSame('max-age=31536000; includeSubDomains', $h['Strict-Transport-Security']);
|
|
self::assertSame('max-age=31536000; includeSubDomains', $h['Strict-Transport-Security']);
|
|
|
self::assertArrayHasKey('Content-Security-Policy', $h);
|
|
self::assertArrayHasKey('Content-Security-Policy', $h);
|
|
|
|
|
|
|
|
$hPlain = FatalErrorHandler::securityHeaders(false);
|
|
$hPlain = FatalErrorHandler::securityHeaders(false);
|
|
|
self::assertArrayNotHasKey('Strict-Transport-Security', $hPlain);
|
|
self::assertArrayNotHasKey('Strict-Transport-Security', $hPlain);
|
|
|
|
|
+ // R01-N25: the new header is unconditional — must ride along on
|
|
|
|
|
+ // both HTTP and HTTPS responses, unlike HSTS.
|
|
|
|
|
+ self::assertSame('none', $hPlain['X-Permitted-Cross-Domain-Policies']);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** @return callable(string,bool):void */
|
|
/** @return callable(string,bool):void */
|