Я работаю над сценарием, в котором некоторые файлы JavaScript должны размещаться на CDN. Я хочу иметь какой-то механизм, чтобы при загрузке этих файлов на стороне пользователя я мог гарантировать, что файлы не были подделаны и действительно поступают из указанного CDN.
Я понимаю, что задача очень проста, если я использую SSL, но все же я хочу убедиться, что нужные файлы обслуживаются даже по HTTP без SSL.
Насколько я мог найти, не существует существующего механизма, такого как цифровая подпись для файлов JavaScript, который поддерживается на разных платформах. Возможно, это не нужно?
Есть ли встроенный в браузеры метод проверки автора файлов JavaScript? Могу ли я что-нибудь сделать, чтобы сделать это безопасным способом?
javascript
code-signing
баба26
источник
источник
Ответы:
Фактически, такая функция в настоящее время разрабатывается под названием Subresource Integrity . Посмотрите на
integrity
атрибут<script>
тега. Хотя он еще не полностью принят повсеместно , он выполняет именно эту цель.Источник
Источник
Пример:
<script src="https://example.com/example-framework.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="anonymous"></script>
Однако обратите внимание, что это не защитит вас от атак «Человек посередине», если вы передаете свои ресурсы через простой HTTP. В этом случае хэш-код может быть подделан злоумышленником, что сделает защиту от манипулируемых файлов сценариев бесполезной.
По этой причине вы всегда должны использовать безопасные HTTPS-соединения вместо обычного HTTP в дополнение к мерам безопасности, описанным выше.
источник
https://code.jquery.com/
, то любой, кто взломает,code.jquery.com
сможет XSS вашего сайта, независимо от того, осуществляется лиcode.jquery.com
доступ через HTTPS. При наличии этих проверок злоумышленник может только предотвратить загрузку скриптов, но не заменить их вредоносными.Вы ищете проверки целостности подресурсов .
Например, вот фрагмент jQuery CDN:
<script src="https://code.jquery.com/jquery-3.1.0.js" integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk=" crossorigin="anonymous"></script>
источник
code.jquery.com
. Это может защитить вас от взломаcode.jquery.com
.Отказ от ответственности: как всегда, вы должны рассматривать эти механизмы только как полезные при использовании https, поскольку их можно легко отключить через MitM с помощью http.
В дополнение к механизму, описанному в приведенных выше ответах, вы также можете использовать заголовки HTTP-ответа политики безопасности содержимого на родительской странице.
http://www.html5rocks.com/en/tutorials/security/content-security-policy/
Этот механизм существует уже довольно давно, поэтому поддержка браузером, скорее всего, довольно хорошая, просто обязательно проверьте.
Кроме того, если вы хотите убедиться, что старые несовместимые браузеры не являются небезопасными, вы можете включить сценарий синхронного перенаправления в верхней части страницы, что не разрешено политикой.
источник
Есть важный момент в отношении того, что такое подписание может и чего нельзя. Он может защитить пользователя от гипотетических атак, когда кто-то изменяет ваш код. Он не может гарантировать вашему сайту, что ваш код - это выполняемый код. Другими словами, вы все равно не можете доверять тому, что приходит на ваш сайт от клиента.
источник
Если ваша модель противника разрешает злоумышленнику изменять файлы JavaScript по мере их доставки из CDN, то ваша модель противника позволяет злоумышленнику изменять источник ссылки по мере его доставки, чтобы удалить любую попытку проверки, изменить адрес источника на отличный от CDN и / или полностью удалить ссылку на JavaScript.
И давайте не будем открывать банку червей, как ваше приложение может определять, правильно или нет преобразователь пользователя разрешает CDN через HTTP-запросы (или любой другой механизм, не имеющий проверенной цепочки доверия).
/ etc / hosts:
# ... 1.2.3.4 vile-pirates.org trustworthy.cdn # ...
источник
Вы можете гарантировать это с помощью целостности субресурсов. Многие общедоступные CDN включают хэши SRI во встраиваемый код, предлагаемый на веб-сайтах CDN. Например, на PageCDN, когда вы нажимаете файл jquery на странице jQuery CDN , вы получаете возможность либо скопировать URL-адрес, либо использовать тег скрипта, содержащий хэш SRI, как показано ниже:
<script src="https://pagecdn.io/lib/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
При загрузке страницы браузер отправит запрос для этого ресурса, и по завершении запроса он сопоставит хэш полученного файла с тем, который указан в качестве значения целостности в теге скрипта. Если оба хэша не совпадают, браузер отклонит файл jquery.
На данный момент эта функция поддерживается 91% браузеров по всему миру. Подробнее о caniuse .
источник