Hash Mismatch для Wordpress JQuery 1.12.4

Я использую последний (4.9.8) WordPress и в настоящее время работаю над добавлением атрибута целостности в <script> теги. Версия /wp-includes/js/jquery/jquery.js является 1.12.4, SRI (хэш) для этого

sha256-/EjR2A7OcaeaezmHf0EE1J09psNmXPbcIDAA+330RH4=,

Версия 1.12.4 на сайте jquery и Cloudflare CDN имеет SRI

sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU=

Код выглядит минимизированным, но SRI также не соответствует минимизированной версии. Атрибуты SRI на сайтах Cloudflare и jquery совпадают и для минимизированных версий.

  • Кто-нибудь знает, почему разница?
  • Часто ли разработчики WordPress настраивают jquery (стандартные) библиотеки?

1 ответ

Решение

https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/js/jquery/jquery.js используемый Wordpress, является копией https://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.js1 отправлено на 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=

… Который соответствует хешу, показанному для https://code.jquery.com/jquery-1.12.4.min.js на сайте jQuery:

<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=

См. Также раздел " Инструменты для генерации хешей SRI " в статье MDN о целостности субресурсов.

Другие вопросы по тегам