Bootstrapcdn最近改变了他们的链接.它现在看起来像这样:
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha256-MfvZlkHCEqatNoGiOXveE8FIwMzZg4W85qfrfIFBfYc= sha512-dTfge/zgoMYpP7QbHy4gWMEGsbsdZeCXz7irItjcC3sPUFtf0kuFbDz/ixG7ArTxmDjLXDmezHubeNikyKGVyQ=="
crossorigin="anonymous">
Run Code Online (Sandbox Code Playgroud)
这些integrity和crossorigin属性是什么意思?它们如何影响样式表的加载?
是否有任何实现或规范在<script>标记的属性中包含哈希或签名,以便浏览器可以在执行之前验证是否检索到了正确的文件?就像是:
<script
src="http://cdn.example.com/jquery-2001.js"
signature="sha-256/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
></script>
Run Code Online (Sandbox Code Playgroud)
其动机是这样的:通常,您为网站使用的每个额外CDN或主机都会增加您的漏洞,方法是添加可能被黑客攻击以破坏您网站的新目标.允许主要前端服务器断言这些文件的哈希值或签名可以完全消除这种风险,使您在设计架构时更加灵活.您甚至可以从不受信任的对等网络请求丢失的文件.
我以为我记得有关此的规范,但一直未能找到它.
我在bootstrap的网站上,我最近注意到他们的CDN链接包含一个带有SHA-384密钥的完整性属性.
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
Run Code Online (Sandbox Code Playgroud)
我认为这是一种验证脚本源的方法,但更多的是我想知道它是如何使用的,如果这是任何规范的一部分?
此外,这只适用于脚本src,还是可以与任何非同源源一起使用?
在哪里可以找到脚本的子资源完整性值//maps.google.com/maps/api/js?
例如:
<script src="//maps.google.com/maps/api/js" integrity="sha256-????" crossorigin="anonymous"></script>
Run Code Online (Sandbox Code Playgroud) google-maps google-maps-api-3 google-cdn subresource-integrity
我想对Subresource Integrity属性进行软集成,因此请确保没有破坏应用程序,而只是警告我需要修复某些地方。
是否可以选择这样做?
<script>接受integrity属性,所以我可以安全地加载模块:
<script type="module"
src="https://example.com/module.mjs"
integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
crossorigin="anonymous"
></script>
Run Code Online (Sandbox Code Playgroud)
但是在脚本中加载模块时如何保持安全?
import foo from "https://example.com/module.mjs"
Run Code Online (Sandbox Code Playgroud)
import("https://example.com/module.mjs").then(console.log)
Run Code Online (Sandbox Code Playgroud)
const myWorker = new Worker('worker.js')
Run Code Online (Sandbox Code Playgroud) 我有一个带有index.html文件的角度应用程序
在我的index.html页面中考虑我有以下SRI代码(SubResource Integrity)
<html>
<head>
<meta http-equiv="Content-Security-Policy"
content="script-src 'self' scripts/alert.js 'unsafe-inline' 'unsafe-eval' 'sha256-qznLcsROx4GACP2dm0UCKCzCG+HiZ1guq6ZZDob/Tng='">
<script src="scripts/alert.js"
integrity="sha256-qznLcsROx4GACP2dm0UCKCzCG+HiZ1guq6ZZDob/Tng="
crossorigin="anonymous"></script>
</head>
</html>Run Code Online (Sandbox Code Playgroud)
如果我使用require JS,那么我必须将'alert.js'的脚本包含到'main.js'文件中,如下所示
require.config({
// alias libraries paths
paths: {
'jquery': '/scripts/alert'
},
// kick start application
deps: ['../app/require.bootstrap']
})Run Code Online (Sandbox Code Playgroud)
有人可以帮助我如何在路径中引用alert.js脚本时将integrity属性包含在main.js文件中.
我在内容安全策略(CSP) 标头中启用了子资源完整性(SRI) 。
如何集成谷歌分析?当谷歌更新他们的analytics-javascript时,为他们的脚本使用哈希可能会在几天内中断。
有什么建议?
security google-analytics content-security-policy subresource-integrity
子资源完整性似乎是一个绝妙的权宜之计,允许以安全的方式使用第三方控制的HTTP服务资源。
但是,该规范仅考虑HTMLLinkElement和HTMLScriptElement接口:
注意
本规范的未来版本可能会包括对所有可能的子资源完整性的支持,即
a,audio,embed,iframe,img,link,object,script,source,track,和video元素。
我知道script和link元素所指的内容更加“活跃”,但是浏览器删除了绿色的挂锁,以便通过纯HTTP甚至获取相对无害的图像,而规范选择忽略它们?对我来说,这似乎是极缺乏远见的。
这背后的原因是什么,我们什么时候可以期待“未来修订”?
html ×4
cors ×2
javascript ×2
angularjs ×1
browser ×1
cross-domain ×1
cryptography ×1
es6-modules ×1
google-cdn ×1
google-maps ×1
html5 ×1
https ×1
image ×1
require ×1
requirejs ×1
security ×1
w3c ×1