缺少子资源完整性保护

Missing Subresource Integrity Protection

我已经在 Heroku 上搭建了一个 django 博客应用程序,目前一切正常,但我有一个关于 Missing Subresource Integrity Protection 的小问题。

我在使用 heroku 插件方面还很陌生,但我已经设置了 tinfoil 安全性,在初始扫描后我遇到了 3 个漏洞。扫描结果表明我是 Missing Subresource Integrity Protection,他们向我推荐了这个:

    > All externally loaded resources must have their content pinned using
    > the subresource integrity mechanisms provided by modern browsers. This
    > involves computing a hash of the contents of the resource, and
    > specifying this hash when loading that resource. In the case of a
    > script, this might look like the following:

        <script src="https://example.com/include.js"
                    integrity="sha256-Rj/9XDU7F6pNSX8yBddiCIIS+XKDTtdq0//No0MH0AE="
                    crossorigin="anonymous"></script>

SRI Hash is an option for computing the necessary hashes.

谁能解释一下这一切意味着什么,以便我可以从中学到一些东西,以及将来该怎么做才能避免这种情况?

Subresource integrity 是一种规范,"defines a mechanism by which user agents may verify that a fetched resource has been delivered without unexpected manipulation." 它基本上是您资产的校验和,如果不符合指定的完整性值,兼容的浏览器将不会加载资源。

只要您的 sprockets 版本为 3.x 或更高版本,就可以在 Rails 中轻松添加。您可以按照 sprockets documentation:

中的示例添加检查
javascript_include_tag :application, integrity: true
# => "<script src="/assets/application.js" integrity="sha256-TvVUHzSfftWg1rcfL6TIJ0XKEGrgLyEq6lEpcmrG9qs="></script>"

GitHub 工程师有一个 interesting blog post,他们在那里详细讨论了该功能。