内容安全策略包含无效来源
Content Security Policy contains an invalid source
我正在尝试在我的网站上使用内容安全策略,我已经做对了一切,一切正常,但这个错误仍然出现在控制台中
The source list for the Content Security Policy directive 'default-src' contains an invalid source: 'data:frame-src'. It will be ignored.
我哪里做错了?这里有什么问题?
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class ContentSecurityPolicy
{
public $resources = [
'default-src' => [
"'self'",
"'unsafe-inline'",
'cdn.jsdelivr.net',
'*.googletagmanager.com',
'fonts.googleapis.com',
'cdnjs.cloudflare.com',
'fonts.gstatic.com',
'code.jquery.com',
],
'img-src' => [
"data:",
],
'frame-src' => [
'youtube.com www.youtube.com',
],
];
public function handle(Request $request, Closure $next)
{
$response = $next($request);
$contentSecurityPolicy = '';
foreach ($this->resources as $key => $values) {
$contentSecurityPolicy .= $key . ' ' . implode(' ', $values);
}
$response->header("Content-Security-Policy", $contentSecurityPolicy);
return $response;
}
}
还有一个错误
Refused to load the image 'https://ssl.gstatic.com/ui/v1/icons/mail/images/2/openhand.cur' because it violates the following Content Security Policy directive: "default-src 'self' 'unsafe-inline' cdn.jsdelivr.net *.googletagmanager.com fonts.googleapis.com cdnjs.cloudflare.com fonts.gstatic.com code.jquery.comimg-src data:frame-src youtube.com www.youtube.com". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.
- 查看您生成的 CSP:
default-src 'self' 'unsafe-inline' cdn.jsdelivr.net *.googletagmanager.com fonts.googleapis.com cdnjs.cloudflare.com fonts.gstatic.com code.jquery.comimg-src data:frame-src youtube.com www.youtube.com
但通常应该是:
default-src 'self' 'unsafe-inline' cdn.jsdelivr.net *.googletagmanager.com fonts.googleapis.com cdnjs.cloudflare.com fonts.gstatic.com code.jquery.com; img-src data:; frame-src youtube.com www.youtube.com
指令之间缺少一个分号 ;
。更改行:
$contentSecurityPolicy .= $key . ' ' . implode(' ', $values);
到:
$contentSecurityPolicy .= $key . ' ' . implode(' ', $values) .';';
'img-src' => [ "data:", ],
表示您不从自己的站点加载图像。这种情况极为罕见,因此 'img-src' => [ "'self'", "data:", ],
更好。
使用 default-src
作为隐式初始化其他指令的来源是一种不好的做法。这可以用在简单的情况下,但不能用在你的情况下——稍后你会想去掉 script-src
指令中的 'unsafe-inline'
,因为它的使用不能防止 XSS。
因此,您必须对 style-src
使用 'unsafe-inline'
,对 script-src
使用 'nonce-value'
,但您未能在 default-src
.[=45= 中混合这些标记]
在 default-src
中使用 'nonce-value'
也会在 Firefox 中使用 vulnerability。
按照指令分发资源,这样你以后就不会头疼了。
我正在尝试在我的网站上使用内容安全策略,我已经做对了一切,一切正常,但这个错误仍然出现在控制台中
The source list for the Content Security Policy directive 'default-src' contains an invalid source: 'data:frame-src'. It will be ignored.
我哪里做错了?这里有什么问题?
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class ContentSecurityPolicy
{
public $resources = [
'default-src' => [
"'self'",
"'unsafe-inline'",
'cdn.jsdelivr.net',
'*.googletagmanager.com',
'fonts.googleapis.com',
'cdnjs.cloudflare.com',
'fonts.gstatic.com',
'code.jquery.com',
],
'img-src' => [
"data:",
],
'frame-src' => [
'youtube.com www.youtube.com',
],
];
public function handle(Request $request, Closure $next)
{
$response = $next($request);
$contentSecurityPolicy = '';
foreach ($this->resources as $key => $values) {
$contentSecurityPolicy .= $key . ' ' . implode(' ', $values);
}
$response->header("Content-Security-Policy", $contentSecurityPolicy);
return $response;
}
}
还有一个错误
Refused to load the image 'https://ssl.gstatic.com/ui/v1/icons/mail/images/2/openhand.cur' because it violates the following Content Security Policy directive: "default-src 'self' 'unsafe-inline' cdn.jsdelivr.net *.googletagmanager.com fonts.googleapis.com cdnjs.cloudflare.com fonts.gstatic.com code.jquery.comimg-src data:frame-src youtube.com www.youtube.com". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.
- 查看您生成的 CSP:
default-src 'self' 'unsafe-inline' cdn.jsdelivr.net *.googletagmanager.com fonts.googleapis.com cdnjs.cloudflare.com fonts.gstatic.com code.jquery.comimg-src data:frame-src youtube.com www.youtube.com
但通常应该是:
default-src 'self' 'unsafe-inline' cdn.jsdelivr.net *.googletagmanager.com fonts.googleapis.com cdnjs.cloudflare.com fonts.gstatic.com code.jquery.com; img-src data:; frame-src youtube.com www.youtube.com
指令之间缺少一个分号 ;
。更改行:
$contentSecurityPolicy .= $key . ' ' . implode(' ', $values);
到:
$contentSecurityPolicy .= $key . ' ' . implode(' ', $values) .';';
'img-src' => [ "data:", ],
表示您不从自己的站点加载图像。这种情况极为罕见,因此'img-src' => [ "'self'", "data:", ],
更好。使用
default-src
作为隐式初始化其他指令的来源是一种不好的做法。这可以用在简单的情况下,但不能用在你的情况下——稍后你会想去掉script-src
指令中的'unsafe-inline'
,因为它的使用不能防止 XSS。
因此,您必须对style-src
使用'unsafe-inline'
,对script-src
使用'nonce-value'
,但您未能在default-src
.[=45= 中混合这些标记] 在default-src
中使用'nonce-value'
也会在 Firefox 中使用 vulnerability。
按照指令分发资源,这样你以后就不会头疼了。