Bootstrap 5 次违反内容安全政策
Content Security Policy violation with Bootstrap 5
我有一个使用 Bootstrap 5 的网站,其中包含以下输入标签:
<input class="form-check-input ms-1" id="validated" name="validated" type="checkbox" checked>
包含表单检查输入 class 导致客户端生成错误消息:
Refused to load the image 'data:image/svg+xml,%3csvg
xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath
fill='none' stroke='%23fff' stroke-linecap='round'
stroke-linejoin='round' stroke-width='3' d='M6 10l3
3l6-6'/%3e%3c/svg%3e' because it violates the following Content
Security Policy directive: "img-src 'self' www.w3.org".
有人可以告诉我为什么这被阻止吗?我在CSP中尝试了data://www.w3.org、http://www.w3.org、*.w3.org等所有排列,none似乎让客户满意.
这与 Chrome 和 Edge 客户端的情况相同。
Bootstrap CSS stylesheet 包含 .form-check-input
class 数据:-Url 图片:
.form-check-input:checked[type=checkbox] {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
}
.form-check-input:checked[type=radio] {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
}
.form-check-input[type=checkbox]:indeterminate {
background-color: #0d6efd;
border-color: #0d6efd;
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
}
要允许这些图像,您必须将 data:
scheme-source 添加到 img-src
指令中。
您还可以使用 Webpack 将 SVG 提取到单独的文件中。例如,参见 https://github.com/charlesroelli/bootstrap-webpack-csp-compat-config,具体是文件 webpack.config.js
:
modules.exports = {
...,
module: {
rules: [
{
mimetype: 'image/svg+xml',
scheme: 'data',
type: 'asset/resource',
generator: {
filename: 'icons/[hash].svg'
}
}
]
}
};
我有一个使用 Bootstrap 5 的网站,其中包含以下输入标签:
<input class="form-check-input ms-1" id="validated" name="validated" type="checkbox" checked>
包含表单检查输入 class 导致客户端生成错误消息:
Refused to load the image 'data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e' because it violates the following Content Security Policy directive: "img-src 'self' www.w3.org".
有人可以告诉我为什么这被阻止吗?我在CSP中尝试了data://www.w3.org、http://www.w3.org、*.w3.org等所有排列,none似乎让客户满意.
这与 Chrome 和 Edge 客户端的情况相同。
Bootstrap CSS stylesheet 包含 .form-check-input
class 数据:-Url 图片:
.form-check-input:checked[type=checkbox] {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
}
.form-check-input:checked[type=radio] {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
}
.form-check-input[type=checkbox]:indeterminate {
background-color: #0d6efd;
border-color: #0d6efd;
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
}
要允许这些图像,您必须将 data:
scheme-source 添加到 img-src
指令中。
您还可以使用 Webpack 将 SVG 提取到单独的文件中。例如,参见 https://github.com/charlesroelli/bootstrap-webpack-csp-compat-config,具体是文件 webpack.config.js
:
modules.exports = {
...,
module: {
rules: [
{
mimetype: 'image/svg+xml',
scheme: 'data',
type: 'asset/resource',
generator: {
filename: 'icons/[hash].svg'
}
}
]
}
};