Exemple #1
0
 /**
  * Performs the default CSP modifications that may be injected by other
  * applications
  *
  * @param Controller $controller
  * @param string $methodName
  * @param Response $response
  * @return Response
  */
 public function afterController($controller, $methodName, Response $response)
 {
     $policy = !is_null($response->getContentSecurityPolicy()) ? $response->getContentSecurityPolicy() : new ContentSecurityPolicy();
     $defaultPolicy = $this->contentSecurityPolicyManager->getDefaultPolicy();
     $defaultPolicy = $this->contentSecurityPolicyManager->mergePolicies($defaultPolicy, $policy);
     $response->setContentSecurityPolicy($defaultPolicy);
     return $response;
 }
 public function testGetDefaultPolicyWithPolicies()
 {
     $policy = new \OCP\AppFramework\Http\ContentSecurityPolicy();
     $policy->addAllowedFontDomain('mydomain.com');
     $policy->addAllowedImageDomain('anotherdomain.de');
     $this->contentSecurityPolicyManager->addDefaultPolicy($policy);
     $policy = new \OCP\AppFramework\Http\ContentSecurityPolicy();
     $policy->addAllowedFontDomain('example.com');
     $policy->addAllowedImageDomain('example.org');
     $policy->allowInlineScript(true);
     $this->contentSecurityPolicyManager->addDefaultPolicy($policy);
     $policy = new \OCP\AppFramework\Http\EmptyContentSecurityPolicy();
     $policy->addAllowedChildSrcDomain('childdomain');
     $policy->addAllowedFontDomain('anotherFontDomain');
     $this->contentSecurityPolicyManager->addDefaultPolicy($policy);
     $expected = new \OC\Security\CSP\ContentSecurityPolicy();
     $expected->allowInlineScript(true);
     $expected->addAllowedFontDomain('mydomain.com');
     $expected->addAllowedFontDomain('example.com');
     $expected->addAllowedFontDomain('anotherFontDomain');
     $expected->addAllowedImageDomain('anotherdomain.de');
     $expected->addAllowedImageDomain('example.org');
     $expected->addAllowedChildSrcDomain('childdomain');
     $expectedStringPolicy = 'default-src \'none\';script-src \'self\' \'unsafe-inline\' \'unsafe-eval\';style-src \'self\' \'unsafe-inline\';img-src \'self\' data: blob: anotherdomain.de example.org;font-src \'self\' mydomain.com example.com anotherFontDomain;connect-src \'self\';media-src \'self\';child-src childdomain';
     $this->assertEquals($expected, $this->contentSecurityPolicyManager->getDefaultPolicy());
     $this->assertSame($expectedStringPolicy, $this->contentSecurityPolicyManager->getDefaultPolicy()->buildPolicy());
 }