s1syphos / kirby-sri
为 Kirby 提供的子资源完整性哈希和缓存破坏静态资源
Requires
- composer/installers: ~1.0
This package is auto-updated.
Last update: 2021-12-17 15:40:05 UTC
README
此插件根据 CSS / JS 文件的内容生成基于 base64 编码的加密哈希,并将它们添加到相应的 <link>
或 <script>
元素的 integrity
属性中。它还应用缓存破坏/指纹。
目录
什么是 SRI?
"子资源完整性 (SRI) 是一个安全功能,允许浏览器验证他们获取的文件(例如,从 CDN)是否在传输过程中未被意外篡改。它通过允许您提供一个加密哈希来实现,该哈希必须与获取的文件匹配。"
输入 kirby-sri
:Kirby 端生成的 SRI 哈希,用于更安全的 CDN 使用。有关 CDN 集成和 Kirby 的更多信息,请参阅文档或 Kirb 的合作伙伴KeyCDN以开始。
此插件仅提供哈希生成。 对于与 CDNs 一起使用,请参阅 Kirby 的官方 cdn-plugin
!
入门
使用以下方法之一安装并使用 kirby-sri
Git 子模块
如果您熟悉 Git,可以将此插件作为子模块下载。
git submodule add https://github.com/S1SYPHOS/kirby-sri.git site/plugins/kirby-sri
Composer
composer require S1SYPHOS/kirby-sri
克隆或下载
确保文件夹名为 kirby-sri
。
激活插件
在您的 config.php
中使用以下行来激活插件
c::set('plugin.kirby-sri', true);
Kirby 的内置助手函数 css()
和 js()
现在将包含一个与匹配的 SRI 哈希一起的 integrity
属性。如果您只想在特定域上激活 kirby-sri
,请参阅多环境设置。
配置
修改 kirby-sri
选项以适应您的需求
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
plugin.kirby-sri.algorithm |
字符串 | sha512 |
定义加密的哈希算法(目前允许的前缀有 sha256 、sha384 和 sha512 )。 |
plugin.kirby-sri.crossorigin |
字符串 | 匿名 |
定义crossorigin 属性。 |
plugin.kirby-sri.fingerprinting |
布尔值 | true |
可选地启用/禁用指纹识别。 |
缓存清除/指纹识别
与往常一样。如果有人提出解决方案,如何通过不同的插件实现子资源完整性以及缓存清除/指纹识别(因为所有这些插件都修改了 Kirby 内置的辅助函数 css()
和 js()
),请随意提交 PR!否则,请按照以下步骤操作
Apache
如果您使用 Apache 作为您的 Web 服务器,请将以下行添加到您的 .htaccess
文件中(在 RewriteBase
之后)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.([0-9]{10})\.(js|css)$ $1.$3 [L]
NGINX
如果您使用 NGINX 作为您的 Web 服务器,请将以下行添加到您的虚拟主机配置中
location /assets {
if (!-e $request_filename) {
rewrite "^/(.+)\.([0-9]{10})\.(js|css)$" /$1.$3 break;
}
}
注意:SRI 哈希生成和缓存清除不适用于外部 URL!
请务必安全使用 - 使用保护措施!
始终使用 https:// URLs 来加载来自 CDN 的子资源,否则它们可能会被阻止
当初始 HTML 通过安全的 HTTPS 连接加载,但其他资源(如图片、视频、样式表、脚本)通过不安全的 HTTP 连接加载时,会发生混合内容。这被称为混合内容,因为 HTTP 和 HTTPS 内容都被加载来显示同一页面,并且初始请求是通过 HTTPS 安全的。现代浏览器会显示有关此类内容的警告,以提示用户该页面包含不安全资源。Google 开发者
致谢/许可证
kirby-sri
受到 Kirby 插件 cachebuster(由 Kirby 团队成员 Bastian Allgeier 和 Lukas Bestle)以及 fingerprint(由 Iksi)的启发。它遵循MIT 许可证,但 在生产中使用 Kirby 需要您购买许可证。您准备好下一步了吗?
特别感谢
我想感谢所有制作优秀软件的人 - 你们很棒。我还总是感谢反馈和错误报告:)