2015-03-26 20 views
17

Esiste un'implementazione o una specifica per includere un hash o una firma in un attributo di uno script <, in modo che il browser possa verificare che il file corretto sia stato recuperato prima di eseguirlo ? Qualcosa di simile:Specificare l'hash di uno script da un host non affidabile

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

La motivazione è questo: in generale, ogni ulteriore CDN o host di utilizzare per il tuo sito aumenta la vulnerabilità, con l'aggiunta di un nuovo obiettivo che può essere violato per compromettere il vostro sito. Consentire ai server front-end primari di affermare gli hash o le firme di tali file potrebbe eliminare completamente tale rischio, consentendo di essere più flessibili nella progettazione della propria architettura. È persino possibile richiedere file mancanti da una rete peer-to-peer non sicura.

Pensavo di aver ricordato una specifica su questo, ma non sono stato in grado di trovarlo.

+0

[Non esiste un attributo 'signature'.] (Https://html.spec.whatwg.org/multipage/scripting.html#the-script-element) Perché ne hai bisogno? – undefined

+0

Non mi aspettavo che questo fosse ancora negli standard accettati, ma pensavo che ci fosse una proposta che era stata implementata su qualche piattaforma. 'signature' è un esempio di come potrebbe essere il nome - mi aspetto che il vero nome e la sintassi siano più ben pensati del mio esempio. – Tim

+0

Qualcosa di simile è necessario per poter usare CDN condivisi (come quelli forniti da jQuery), o CDN in generale, senza aumentare il rischio per la sicurezza. In genere, ogni servizio CDN aggiuntivo aggiunto implica un altro servizio che potrebbe essere compromesso per compromettere il tuo sito. Se il tuo sito primario può affermare hash/firme dei file a cui fa riferimento, tale rischio viene eliminato. Sono sicuro che alla fine avremo uno standard. – Tim

risposta

18

Questa funzione è stata proposta dal W3C come Subresource Integrity. A partire da dicembre 2015, questa raccomandazione è stata implementata by Chrome 44 e Firefox 43.

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

C'è a superficially similar feature in Content Security Policy Level 2, ma limita solamente il contenuto della linea <script> e <style> elementi, non quelli esterni.