#jquery #wordpress #content-security-policy
Вопрос:
Я внедряю CSP в блоге WordPress моей компании. Это работает везде, кроме jQuery. Я считаю, что у меня правильно настроен тег сценария:
<script type='text/javascript' src='https://mywebsiteurl.com/wp-includes/js/jquery/jquery.js?ver=3.5.1' id='jquery-core-js' nonce='96a155c5a23ce6c37c5c4c3677b8eee5b70f590145079ea9eb709a789369b53b'></script>
Тогда это важная часть CSP:
script-src 'self' 'nonce-96a155c5a23ce6c37c5c4c3677b8eee5b70f590145079ea9eb709a789369b53b' and so on...
Это ошибка, которую я получаю:
"Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'nonce-96a155c5a23ce6c37c5c4c3677b8eee5b70f590145079ea9eb709a789369b53b' etc etc. Either the 'unsafe-inline' keyword, a hash ('sha256-qqGbxWM7uia3gTh3zKaastub6jkpM0ypMYPp6TZvrLc='), or a nonce ('nonce-...') is required to enable inline execution."
Ошибка указывает на эту строку в jQuery:
doc.head.appendChild( script ).parentNode.removeChild( script );
Как мне решить эту проблему?
Ответ №1:
Вы <script type='text/javascript' src='https://mywebsiteurl.com/wp-includes/js/jquery/jquery.js?ver=3.5.1'
загружаете не jQuery 3.5.1, потому что Google Chrome говорит:
...Either the 'unsafe-inline' keyword, a hash ('sha256-qqGbxWM7uia3gTh3zKaastub6jkpM0ypMYPp6TZvrLc='), ...'
Это sha256-qqGbxWM7uia3gTh3zKaastub6jkpM0ypMYPp6TZvrLc=
не хэш jQuery 3.5.1, чей настоящий хэш 'sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc='
.
В случае jquery.min.js
хэша для версии v3.5.1 будет sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=
.
Проверьте, что вы загружаете на самом деле, в случае развилок jQuery их правильная работа не гарантируется.
Оригинальный jQuery 3.5.1 поддерживает nonce-value
(доказательство).