WordPress jQuery 1.12.4的哈希不匹配

时间:2018-10-29 18:26:56

标签: jquery wordpress subresource-integrity

我正在使用最新的(4.9.8)WordPress,目前正在为<script>标签添加完整性属性。 /wp-includes/js/jquery/jquery.js的版本为1.12.4。的SRI(哈希)为

sha256-/EjR2A7OcaeaezmHf0EE1J09psNmXPbcIDAA+330RH4=

jquery site上的1.12.4版和Cloudflare CDN具有SRI

sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU=

代码看起来很小,但是SRI也不匹配最小版本。 Cloudflare和jquery网站上的SRI属性也适用于最小版本。

  • 有人知道为什么会有区别吗?
  • WordPress开发人员定制jquery(标准)库是否很常见?

1 个答案:

答案 0 :(得分:1)

Wordpress使用的https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/js/jquery/jquery.jshttps://code.jquery.com/jquery-1.12.4.min.js的副本,已对其进行修改以添加jQuery.noConflict(),以使其处于“无冲突”模式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.js 1 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

1 https://raw.githubusercontent.com/WordPress/WordPress/922f83a69f47c68d9f7adac6520d1de04075d8be/wp-includes/js/jquery/jquery.js,准确地说。

因此,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 $1 }' | 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>

  

/wp-includes/js/jquery/jquery.js的版本为1.12.4。 SRI(哈希)为此   

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 hashesthe MDN article on Subresource Integrity部分。