2015-03-26 16 views
17

Czy istnieje implementacja lub specyfikacja do włączenia skrótu lub podpisu w atrybucie znacznika skryptu <, aby przeglądarka mogła sprawdzić, czy został pobrany właściwy plik przed jego wykonaniem ? Coś jak:Określanie skrótu skryptu z niezaufanego hosta

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

motywacja jest taka: ogólnie, każda dodatkowa CDN lub gospodarzem użyć na swojej stronie zwiększa podatność, dodając nowy cel, który może być posiekany na kompromis witrynę. Umożliwienie głównym serwerom frontonu potwierdzania hashy lub podpisów tych plików może całkowicie wyeliminować to ryzyko, pozwalając na większą elastyczność podczas projektowania architektury. Możesz nawet zażądać brakujących plików z niezaufanej sieci peer-to-peer.

Pomyślałem, że zapamiętałem specyfikację na ten temat, ale nie byłem w stanie go znaleźć.

+0

[Nie ma atrybutu "signature".] (Https://html.spec.whatwg.org/multipage/scripting.html#the-script-element) Dlaczego tego potrzebujesz? – undefined

+0

Nie spodziewałem się, że będzie to w akceptowanych standardach, ale pomyślałem, że była propozycja, która została wdrożona na jakiejś platformie. 'signature' był przykładem tego, jak ta nazwa mogłaby być - oczekiwałbym, że prawdziwe imię i składnia będą bardziej przemyślane niż mój przykład. – Tim

+0

Coś w tym stylu jest niezbędne, aby móc korzystać ze wspólnych CDN (takich jak te dostarczane przez jQuery) lub ogólnie z CDN bez zwiększania ryzyka związanego z bezpieczeństwem. Zasadniczo każda dodatkowa dodana usługa CDN oznacza jeszcze jedną usługę, która może zostać zaatakowana przez hakera w celu złamania zabezpieczeń Twojej witryny. Jeśli Twoja witryna główna może potwierdzać hashy/sygnatury plików, do których się odwołuje, ryzyko to jest wyeliminowane. Jestem pewien, że ostatecznie będziemy mieć standard. – Tim

Odpowiedz

18

Ta funkcja została zaproponowana przez W3C jako Subresource Integrity. Od grudnia 2015 r. Zalecenie to zostało wdrożone: by Chrome 44 i Firefox 43.

Przykład 1
<link rel="stylesheet" href="https://site53.example.net/style.css" 
     integrity="sha256-vjnUh7+rXHH2lg/5vDY8032ftNVCIEC21vL6szrVw9M=" 
     crossorigin="anonymous"> 

Jest a superficially similar feature in Content Security Policy Level 2, ale tylko ogranicza zawartość inline <script> i <style> elementów, a nie z czynnikami zewnętrznymi.

0

To nie wygląda jak to jest obsługiwane zgodnie z Mozilla docs Developer Network:

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

Jednak zawsze można sprowadzić do zasobu za pośrednictwem XHR (zakładając CORS skonfigurowany jest), hash, a jeśli to jest fajne, eval(). Jednakże, choć jest to interesujące ćwiczenie techniczne, nie wydaje się to praktyczne.