Подтвердить что ты не робот

Указание хэша script с ненадежного хоста

Есть ли какая-либо реализация или спецификация для включения хэша или подписи в атрибуте тега <script> , чтобы браузер мог убедиться, что правильный файл был извлечен до его выполнения? Что-то вроде:

<script
  src="http://cdn.example.com/jquery-2001.js"
  signature="sha-256/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
></script>

Мотивация такова: в общем, каждый дополнительный CDN или хост, который вы используете для своего сайта, увеличивает вашу уязвимость, добавляя новую цель, которую можно взломать, чтобы поставить под угрозу свой сайт. Предоставление вашим основным интерфейсным серверам утверждений хэшей или подписи этих файлов может полностью устранить этот риск, что позволит вам быть более гибкими при проектировании вашей архитектуры. Вы даже можете запросить отсутствующие файлы из ненадежной одноранговой сети.

Я думал, что вспомнил спецификацию об этом, но не смог его найти.

4b9b3361

Ответ 1

Эта функция была предложена W3C как Integrity Subresource. По состоянию на декабрь 2015 года эта рекомендация была реализована Chrome 44 и Firefox 43.

ПРИМЕР 1
<link rel="stylesheet" href="https://site53.example.net/style.css"
      integrity="sha256-vjnUh7+rXHH2lg/5vDY8032ftNVCIEC21vL6szrVw9M="
      crossorigin="anonymous">

Существует поверхностно подобная функция в политике безопасности контента 2 уровня, но она ограничивает содержимое встроенных <script> и <style> элементы, а не внешние.

Ответ 2

FWIW, сегодня я создал страницу MDN для Целостность Subresource (функция, описанная в ответе здесь). Также связано: CDN, который не может XSS вы: использование целостности Subresource от Frederik Braun (соредактор спецификации Integrity Subresource), который входит в более подробно о проблеме, описанной в этом вопросе, а также объяснении того, как функция целостности Subresource обращается к этой проблеме.

Ответ 3

Не похоже, что он поддерживается в соответствии с документами Mozilla Developer Network:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

Однако вы всегда можете получить ресурс через XHR (при условии, что CORS настроен), hash it, и если это круто, eval(). Однако, хотя интересное техническое упражнение это не кажется практичным.