Wordpress jquery 1.12.4 的哈希不匹配
Hash Mismatch for Wordpress jquery 1.12.4
我正在使用最新的 (4.9.8) WordPress,目前正致力于将完整性属性添加到 <script>
标签。 /wp-includes/js/jquery/jquery.js
的版本是 1.12.4
。这个的 SRI(散列)是
sha256-/EjR2A7OcaeaezmHf0EE1J09psNmXPbcIDAA+330RH4=
.
jquery site and Cloudflare CDN 上的版本 1.12.4
有 SRI
sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU=
代码看起来是精简版,但SRI 也不匹配精简版。 Cloudflare 和 jquery 站点上的 SRI 属性也与缩小版本匹配。
- 有人知道为什么不一样吗?
- WordPress 开发人员自定义 jquery(标准)库是否很常见?
https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/js/jquery/jquery.js used by Wordpress is a copy of https://code.jquery.com/jquery-1.12.4.min.js that’s been modified to add jQuery.noConflict()
, to put it in “no conflict” mode https://api.jquery.com/jquery.noconflict/.
我想 Wordpress 这样做是为了防止在您的 Wordpress 站点中发生任何冲突,您可能会加载一些其他使用 $
作为函数或变量名称的库。
因此,如果您想使用具有子资源完整性的 /wp-includes/js/jquery/jquery.js
文件,您需要使用与上游版本不同的散列 — 因为内容不同。
更多详情
https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/js/jquery/jquery.js1 diffed against https://code.jquery.com/jquery-1.12.4.min.js 显示:
--- jquery-1.12.4.min.js 2018-10-30 08:44:12.545350081 +0900
+++ jquery.js 2018-10-30 08:38:48.978809390 +0900
@@ -3,3 +3,4 @@
}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject...
marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px"...
padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function...
+jQuery.noConflict();
\ No newline at end of file
因此,https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/js/jquery/jquery.js 添加 jQuery.noConflict();
行并从文件末尾删除换行符。
如果您删除 jQuery.noConflict();
行并在该文件的末尾添加一个换行符,那么您最终会得到与上游 https://code.jquery.com/jquery-1.12.4.min.js 相同的内容。如果您为该修改后的文件生成哈希,您将得到:
$ shasum -b -a 256 jquery-wordpress-modified.js \
| awk '{ print }' | xxd -r -p | base64
ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=
……或者……
$ cat jquery-wordpress-modified.js \
| openssl dgst -sha256 -binary | openssl base64 -A
ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=
…与 jQuery 站点上 https://code.jquery.com/jquery-1.12.4.min.js 显示的散列相匹配:
<script
src="https://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
crossorigin="anonymous"></script>
The version of /wp-includes/js/jquery/jquery.js
is 1.12.4
. The SRI (hash) for this is
sha256-/EjR2A7OcaeaezmHf0EE1J09psNmXPbcIDAA+330RH4=
https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/js/jquery/jquery.js(当前显示v1.12.4),当我检查它时,上面没有那个哈希;相反它有这个:
$ curl -s -O https://raw.githubusercontent.com/WordPress/WordPress/922f83a69f47c68d9f7adac6520d1de04075d8be/wp-includes/js/jquery/jquery.js \
&& cat jquery.js | openssl dgst -sha256 -binary | openssl base64 -A
+gVfL3xbc127txlU9DSu15klvAD/L/vD7PxKeQaJpyM=
另见 Tools for generating SRI hashes section of the MDN article on Subresource Integrity。
我正在使用最新的 (4.9.8) WordPress,目前正致力于将完整性属性添加到 <script>
标签。 /wp-includes/js/jquery/jquery.js
的版本是 1.12.4
。这个的 SRI(散列)是
sha256-/EjR2A7OcaeaezmHf0EE1J09psNmXPbcIDAA+330RH4=
.
jquery site and Cloudflare CDN 上的版本 1.12.4
有 SRI
sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU=
代码看起来是精简版,但SRI 也不匹配精简版。 Cloudflare 和 jquery 站点上的 SRI 属性也与缩小版本匹配。
- 有人知道为什么不一样吗?
- WordPress 开发人员自定义 jquery(标准)库是否很常见?
https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/js/jquery/jquery.js used by Wordpress is a copy of https://code.jquery.com/jquery-1.12.4.min.js that’s been modified to add jQuery.noConflict()
, to put it in “no conflict” mode https://api.jquery.com/jquery.noconflict/.
我想 Wordpress 这样做是为了防止在您的 Wordpress 站点中发生任何冲突,您可能会加载一些其他使用 $
作为函数或变量名称的库。
因此,如果您想使用具有子资源完整性的 /wp-includes/js/jquery/jquery.js
文件,您需要使用与上游版本不同的散列 — 因为内容不同。
更多详情
https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/js/jquery/jquery.js1 diffed against https://code.jquery.com/jquery-1.12.4.min.js 显示:
--- jquery-1.12.4.min.js 2018-10-30 08:44:12.545350081 +0900
+++ jquery.js 2018-10-30 08:38:48.978809390 +0900
@@ -3,3 +3,4 @@
}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject...
marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px"...
padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function...
+jQuery.noConflict();
\ No newline at end of file
因此,https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/js/jquery/jquery.js 添加 jQuery.noConflict();
行并从文件末尾删除换行符。
如果您删除 jQuery.noConflict();
行并在该文件的末尾添加一个换行符,那么您最终会得到与上游 https://code.jquery.com/jquery-1.12.4.min.js 相同的内容。如果您为该修改后的文件生成哈希,您将得到:
$ shasum -b -a 256 jquery-wordpress-modified.js \
| awk '{ print }' | xxd -r -p | base64
ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=
……或者……
$ cat jquery-wordpress-modified.js \
| openssl dgst -sha256 -binary | openssl base64 -A
ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=
…与 jQuery 站点上 https://code.jquery.com/jquery-1.12.4.min.js 显示的散列相匹配:
<script
src="https://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
crossorigin="anonymous"></script>
The version of
/wp-includes/js/jquery/jquery.js
is1.12.4
. The SRI (hash) for this issha256-/EjR2A7OcaeaezmHf0EE1J09psNmXPbcIDAA+330RH4=
https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/js/jquery/jquery.js(当前显示v1.12.4),当我检查它时,上面没有那个哈希;相反它有这个:
$ curl -s -O https://raw.githubusercontent.com/WordPress/WordPress/922f83a69f47c68d9f7adac6520d1de04075d8be/wp-includes/js/jquery/jquery.js \
&& cat jquery.js | openssl dgst -sha256 -binary | openssl base64 -A
+gVfL3xbc127txlU9DSu15klvAD/L/vD7PxKeQaJpyM=
另见 Tools for generating SRI hashes section of the MDN article on Subresource Integrity。