Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions src/Fragments/AdobeTagManager.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Fragments\Fragment;
use Silverstripe\CSP\Policies\Policy;

/**
* This allows you to have a adobe tag manager
*/
class AdobeTagManager implements Fragment
{
public static function addTo(Policy $policy): void
{
$policy
->addDirective(Directive::SCRIPT, [
// This is a CDN for adobe tag manager
'https://assets.adobedtm.com',
'https://js.adsrvr.org',
'https://insight.adsrvr.org',
'https://*.adsrvr.org',
])
->addDirective(Directive::FRAME, [
'https://insight.adsrvr.org',
'https://*.adsrvr.org',
])
->addDirective(Directive::SCRIPT_ELEM, [
// This is a CDN for adobe tag manager
'https://assets.adobedtm.com',
'https://js.adsrvr.org',
'https://insight.adsrvr.org',
'https://*.adsrvr.org',
]);
}
}
29 changes: 29 additions & 0 deletions src/Fragments/Dynatrace.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Fragments\Fragment;
use Silverstripe\CSP\Policies\Policy;

/**
* This allows you to have a Dynatrace
*/
class Dynatrace implements Fragment
{
public static function addTo(Policy $policy): void
{
$policy
->addDirective(Directive::CONNECT, [
'https://*.dynatrace.com',
'https://*.bf.dynatrace.com',
])
->addDirective(Directive::SCRIPT_ELEM, [
'https://*.dynatrace.com',
])
->addDirective(Directive::SCRIPT, [
'https://js-cdn.dynatrace.com',
'https://*.dynatrace.com',
]);
}
}
41 changes: 41 additions & 0 deletions src/Fragments/FacebookPixel.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Fragments\Fragment;
use Silverstripe\CSP\Policies\Policy;

/**
* This allows you to have a Facebook pixel related resources
*/
class FacebookPixel implements Fragment
{
public static function addTo(Policy $policy): void
{
$policy
->addDirective(Directive::SCRIPT, [
'https://connect.facebook.net',
'https://www.facebook.com',
])
->addDirective(Directive::SCRIPT_ELEM, [
'https://connect.facebook.net',
'https://www.facebook.com',
])
->addDirective(Directive::CONNECT, [
'https://connect.facebook.net',
'https://www.facebook.com',
'https://www.instagram.com',
])
->addDirective(Directive::FRAME, [
'https://www.facebook.com',
])
->addDirective(Directive::FORM_ACTION, [
'https://www.facebook.com/tr/',
])
->addDirective(Directive::IMG, [
'https://connect.facebook.net',
'https://www.facebook.com',
]);
}
}
41 changes: 41 additions & 0 deletions src/Fragments/GoogleAnalytics.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Policies\Policy;

/**
* This allows you to have a Google analytics related resources
*/
class GoogleAnalytics implements Fragment
{

public static function addTo(Policy $policy): void
{
$policy
->addDirective(Directive::SCRIPT, [
'https://*.google-analytics.com',
])
->addDirective(Directive::SCRIPT_ELEM, [
'https://*.google-analytics.com',
'https://*.googletagmanager.com',
'https://www.googleadservices.com',
])
->addDirective(Directive::CONNECT, [
'https://*.google-analytics.com',
'https://*.analytics.google.com',
'https://*.googletagmanager.com',
'https://www.google.co.nz/ads/ga-audiences',
'https://google.com',
'https://*.google.com',
'https://www.google.com.au',
'https://www.googleadservices.com',
'https://*.googleapis.com',
])
->addDirective(Directive::IMG, [
'https://*.google-analytics.com',
'https://*.googletagmanager.com',
]);
}
}
30 changes: 30 additions & 0 deletions src/Fragments/GoogleRecaptcha.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Fragments\Fragment;
use Silverstripe\CSP\Policies\Policy;

/**
* This allows you to have a Google Recaptcha related resources
*/
class GoogleRecaptcha implements Fragment
{
public static function addTo(Policy $policy): void
{
$policy
->addDirective(Directive::SCRIPT_ELEM, [
'*.google.com',
'https://*.gstatic.com',
'https://googleads.g.doubleclick.net',
'https://*.googlesyndication.com',
])
->addDirective(Directive::CONNECT, [
'*.google.com',
'https://*.gstatic.com',
'https://googleads.g.doubleclick.net',
'https://*.googlesyndication.com',
]);
}
}
26 changes: 26 additions & 0 deletions src/Fragments/JQuery.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Fragments\Fragment;
use Silverstripe\CSP\Policies\Policy;

/**
* This allows you to have a jQuery CDN
*/
class JQuery implements Fragment
{
public static function addTo(Policy $policy): void
{
$policy
->addDirective(Directive::SCRIPT, [
// This is a CDN for jQuery used from userforms
'https://code.jquery.com',
])
->addDirective(Directive::SCRIPT_ELEM, [
// This is a CDN for jQuery used from userforms
'https://code.jquery.com',
]);
}
}
31 changes: 31 additions & 0 deletions src/Fragments/LinkedIn.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Fragments\Fragment;
use Silverstripe\CSP\Policies\Policy;

/**
* This allows you to have a LinkedIn related assets
*/
class LinkedIn implements Fragment
{
public static function addTo(Policy $policy): void
{
$policy
->addDirective(Directive::SCRIPT, [
'https://*.licdn.com',
])
->addDirective(Directive::SCRIPT_ELEM, [
'https://*.licdn.com',
])
->addDirective(Directive::CONNECT, [
'https://*.linkedin.oribi.io',
'https://*.linkedin.com',
])
->addDirective(Directive::IMG, [
'https://*.linkedin.com',
]);
}
}
27 changes: 27 additions & 0 deletions src/Fragments/QualtricsSurvey.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Fragments\Fragment;
use Silverstripe\CSP\Policies\Policy;

/**
* This allows you to have a qualtrics survey
*/
class QualtricsSurvey implements Fragment
{
public static function addTo(Policy $policy): void
{
$policy
->addDirective(Directive::SCRIPT, [
'https://*.qualtrics.com',
])
->addDirective(Directive::CONNECT, [
'https://*.qualtrics.com',
])
->addDirective(Directive::SCRIPT_ELEM, [
'https://*.qualtrics.com',
]);
}
}
34 changes: 34 additions & 0 deletions src/Fragments/TikTokPixel.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Fragments\Fragment;
use Silverstripe\CSP\Policies\Policy;

/**
* This allows you to have a TikTok Pixel.
*/
class TikTokPixel implements Fragment
{
public static function addTo(Policy $policy): void
{
$policy
->addDirective(Directive::FRAME, [
'bytedance:',
'sslocal:',
])
->addDirective(Directive::SCRIPT, [
'https://analytics.tiktok.com',
])
->addDirective(Directive::SCRIPT_ELEM, [
'https://analytics.tiktok.com',
])
->addDirective(Directive::CONNECT, [
'https://analytics.tiktok.com',
])
->addDirective(Directive::IMG, [
'https://analytics.tiktok.com',
]);
}
}
11 changes: 10 additions & 1 deletion src/Fragments/Vimeo.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Keyword;
use Silverstripe\CSP\Policies\Policy;

/**
Expand All @@ -16,6 +17,14 @@ public static function addTo(Policy $policy): void
// We want to allow scripts loaded from here as they recommend using their embed player
->addDirective(Directive::SCRIPT, 'player.vimeo.com')
->addDirective(Directive::FRAME, "player.vimeo.com")
->addDirective(Directive::CHILD, "player.vimeo.com");
->addDirective(Directive::CHILD, [
Keyword::SELF,
'player.vimeo.com'
])
->addDirective(Directive::WORKER, [
Keyword::SELF,
'player.vimeo.com',
'blob:',
]);
}
}
3 changes: 3 additions & 0 deletions src/Fragments/WomensRefugeShield.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ public static function addTo(Policy $policy): void
])
->addDirective(Directive::FRAME, [
'staticcdn.co.nz',
])
->addDirective(Directive::SCRIPT_ELEM, [
'staticcdn.co.nz',
]);
}
}
28 changes: 28 additions & 0 deletions src/Fragments/ZScalerThree.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace Silverstripe\CSP\Fragments;

use Silverstripe\CSP\Directive;
use Silverstripe\CSP\Fragments\Fragment;
use Silverstripe\CSP\Policies\Policy;

/**
* This allows you to have a ZScalerThree host
*/
class ZScalerThree implements Fragment
{
public static function addTo(Policy $policy): void
{
$policy
->addDirective(Directive::SCRIPT_ELEM, [
'https://*.zscalerthree.net',
'https://gateway.zscalerthree.net',
])
->addDirective(Directive::FRAME, [
'https://*.zscalerthree.net',
'https://gateway.zscalerthree.net',
'https://gateway.zscalertwo.net',
'https://gateway.zscaler.net',
]);
}
}
2 changes: 1 addition & 1 deletion tests/PolicyTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,7 @@ public function configure()
[$request, $response] = $this->getRequestResponse();
$policy->applyTo($response);
$this->assertEquals(
'img-src *.ytimg.com; script-src www.youtube.com s.ytimg.com player.vimeo.com; frame-src *.youtube.com player.vimeo.com; child-src player.vimeo.com',
"img-src *.ytimg.com; script-src www.youtube.com s.ytimg.com player.vimeo.com; frame-src *.youtube.com player.vimeo.com; child-src 'self' player.vimeo.com; worker-src 'self' player.vimeo.com blob:",
$response->getHeader('content-security-policy')
);
}
Expand Down