1. Go to this page and download the library: Download spatie/laravel-csp library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
spatie / laravel-csp example snippets
return [
/*
* A policy will determine which CSP headers will be set. A valid CSP policy is
* any class that extends `Spatie\Csp\Policies\Policy`
*/
'policy' => Spatie\Csp\Policies\Basic::class,
/*
* This policy which will be put in report only mode. This is great for testing out
* a new policy or changes to existing csp policy without breaking anything.
*/
'report_only_policy' => '',
/*
* All violations against the policy will be reported to this url.
* A great service you could use for this is https://report-uri.com/
*
* You can override this setting by calling `reportTo` on your policy.
*/
'report_uri' => env('CSP_REPORT_URI', ''),
/*
* Headers will only be added if this setting is set to true.
*/
'enabled' => env('CSP_ENABLED', true),
/*
* The class responsible for generating the nonces used in inline tags and headers.
*/
'nonce_generator' => Spatie\Csp\Nonce\RandomString::class,
];
// in a routes file
Route::get('my-page', 'MyController')->middleware(Spatie\Csp\AddCspHeaders::class);
// in a routes file
Route::get('my-page', 'MyController')->middleware(Spatie\Csp\AddCspHeaders::class . ':' . MyPolicy::class);
// in a policy
...
->addDirective(Directive::SCRIPT, Keyword::SELF) // will output `'self'` when outputting headers
->addDirective(Directive::STYLE, 'sha256-hash') // will output `'sha256-hash'` when outputting headers
...
// in a policy
...
->addDirective(Directive::SCRIPT, [
Keyword::STRICT_DYNAMIC,
Keyword::SELF,
'www.google.com',
])
->addDirective(Directive::SCRIPT, 'strict-dynamic self www.google.com')
// will both output `'strict_dynamic' 'self' www.google.com` when outputting headers
...
// in a policy
...
->addDirective(Directive::UPGRADE_INSECURE_REQUESTS, Value::NO_VALUE)
->addDirective(Directive::BLOCK_ALL_MIXED_CONTENT, Value::NO_VALUE);
...
namespace App\Support;
use Spatie\Csp\Directive;
use Spatie\Csp\Value;
class Basic extends Policy
{
public function configure()
{
$this
->addDirective(Directive::BASE, Keyword::SELF)
->addDirective(Directive::CONNECT, Keyword::SELF)
->addDirective(Directive::DEFAULT, Keyword::SELF)
->addDirective(Directive::FORM_ACTION, Keyword::SELF)
->addDirective(Directive::IMG, Keyword::SELF)
->addDirective(Directive::MEDIA, Keyword::SELF)
->addDirective(Directive::OBJECT, Keyword::NONE)
->addDirective(Directive::SCRIPT, Keyword::SELF)
->addDirective(Directive::STYLE, Keyword::SELF)
->addNonceForDirective(Directive::SCRIPT)
->addNonceForDirective(Directive::STYLE);
}
}
namespace App\Support;
use Spatie\Csp\Directive;
use Spatie\Csp\Policies\Basic;
class MyCustomPolicy extends Basic
{
public function configure()
{
parent::configure();
$this->addDirective(Directive::SCRIPT, 'www.google.com');
}
}
// in a policy
public function configure()
{
$this
->addDirective(Directive::SCRIPT, 'self')
->addDirective(Directive::STYLE, 'self')
->addNonceForDirective(Directive::SCRIPT)
->addNonceForDirective(Directive::STYLE)
...
}
namespace App\Support;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Vite;
class LaravelViteNonceGenerator implements NonceGenerator
{
public function generate(): string
{
return Vite::cspNonce();
}
}
namespace App\Support;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Vite;
class RandomString implements NonceGenerator
{
public function generate(): string
{
$myNonce = ''; // determine the value for `$myNonce` however you want
Vite::useCspNonce($myNonce);
return $myNonce;
}
}
public function configure()
{
parent::configure();
$this->reportOnly();
}
$this->container->singleton(AppPolicy::class, function ($app) {
return new AppPolicy();
});
app(AppPolicy::class)->addDirective(Directive::SCRIPT, Keyword::UNSAFE_INLINE);
app(AppPolicy::class)->addDirective(Directive::STYLE, Keyword::UNSAFE_INLINE);
namespace App\Services\Csp\Policies;
use Illuminate\Http\Request;
use Spatie\Csp;
use Symfony\Component\HttpFoundation\Response;
class MyCustomPolicy extends Csp\Policies\Policy
{
public function configure()
{
// Add directives
}
public function shouldBeApplied(Request $request, Response $response): bool
{
if (config('app.debug') && ($response->isClientError() || $response->isServerError())) {
return false;
}
return parent::shouldBeApplied($request, $response);
}
}
bash
php artisan vendor:publish --tag=csp-config
{{-- in a view --}}
<style nonce="{{ csp_nonce() }}">
...
</style>
<script nonce="{{ csp_nonce() }}">
...
</script>
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.