Как реализовать CSP с помощью jQuery без использования небезопасного встроенного

#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 (доказательство).