Qualche browser che supporti lo script-nonce?

10

Stavo cercando di includere script-nonce sul mio file html, ma sembra che nessuno dei browser attuali lo supporti.

Qualcuno è a conoscenza di versioni di browser che supportano questa funzionalità? Attualmente sto utilizzando la versione di Chrome 26.0.1410.63 e ho provato anche la versione 28, ma non sembra funzionare

Un file html di esempio con script nonce può essere trovato qui

Tutto quello che vedo è l'errore sulla console javascript, che suggerisce che il browser non supporta ancora lo script-nonce:

Unrecognized Content-Security-Policy directive 'script-nonce'
    
posta Jagat 28.04.2013 - 01:32
fonte

3 risposte

8

Funziona anche su Chrome, ma finora (versione 26.0.1410.64 m) solo con l'intestazione X-Content-Security-Policy invece di Content-Security-Policy , come definito negli esempi di codice già aggiornati. Gruppo di lavoro Sicurezza applicazione Web W3C ha appena spostato Politica di sicurezza dei contenuti 1.1 dalla bozza precedente del gruppo di lavoro allo stato W3C Editor Draft oggi, il 28 aprile 2013 . Quali sono le possibilità, eh?

Suppongo che codice Google abbia fatto il salto con già esempi di codice aggiornati alcuni giorni troppo presto, e mi aspetto che il prossimo aggiornamento di Chrome cambi di conseguenza.

Ad ogni modo, la soluzione si nascondeva nella copia fine di Copia cache di Google della precedente versione di progetto di CSP 1.1 :

This document describes a proposal that has been discussed by the broader community for about two years. There are experimental implementations in Firefox and Chrome, using the header names X-Content-Security-Policy and X-WebKit-CSP respectively. Internet Explorer 10 Platform Preview also contains a partial implementation, using the header name X-Content-Security-Policy.

Se controlliamo Esempi di codice Google di nuovo, la differenza in questi valori di intestazione diventa lampante:

<meta http-equiv="Content-Security-Policy" content="script-nonce noncynonce;">

Quindi sembra che tutto ciò che devi fare (per il momento, fino a quando gli aggiornamenti di Chrome non riflettano la modifica dello stato della proposta CSP 1.1) sia, per cambiare il nome dell'intestazione in X-Content-Security-Policy .

Ho anche testato questi esempi sugli ultimi browser Firefox e Opera, e hanno già accettato Content-Security-Policy e non si sono lamentati degli errori della console.

    
risposta data 28.04.2013 - 22:51
fonte
2

Sì.

Sembra che script-nonce sia stato rimosso dalla specifica, invece script-src 'nonce-ABCD4321'; dovrebbe essere la nuova sintassi. Da quello che posso dire, la nuova sintassi non è supportata in Chrome 32 ma è supportata da Chrome 33 Beta.

Vedi link ad esempio per la pagina di test.

EDIT1: sembra Blink patch link  rimuove il supporto di script-nonce e aggiunge il supporto di script-src 'nonce-xxx'; .

EDIT3: Ultime specifiche .

EDIT2: Ho assolutamente bisogno di script e css in linea perché la mia app web ha il codice in-page per rilevare se lo script incluso oi file di origine CSS non vengono caricati (ad esempio a causa di una connessione mobile inaffidabile). In Chrome, la creazione del meta elemento funziona in modo dinamico:

<script>
var meta = document.createElement('meta');
meta.httpEquiv = 'Content-Security-Policy';
meta.content = "default-src 'none'; connect-src 'self'; img-src 'self'; style-src 'self';";
document.getElementsByTagName('head')[0].appendChild(meta);
</script>
</head>

Da Content Security Policy 1.1 - Bozza di lavoro W3C 04 giugno 2013 :

Esempio 4: un sito web che si basa su elementi di script inline desidera assicurarsi che lo script venga eseguito solo dalla propria origine e quegli elementi inseriti intenzionalmente in linea:

Content-Security-Policy: script-src 'self' 'nonce-$RANDOM';

Gli elementi di script inline verranno quindi eseguiti solo se contengono un attributo nonce corrispondente:

<script nonce="$RANDOM">...</script>

EDIT5: link ha un esempio di registrazione document.onsecuritypolicyviolation (evento). per es.

document.onsecuritypolicyviolation = function (evt) {
    console.log('Bzzp! Security violation on', evt.documentURI);
}

EDIT5 - ALTRO: Beta di Chrome 33 ha generato i seguenti dettagli dell'evento:

blockedURI: ""
columnNumber: 0
currentTarget: document
documentURI: "http://jsbin.com/ArusOCu/1"
effectiveDirective: "script-src"
lineNumber: 0
originalPolicy: "default-src 'none'; script-src http://static.jsbin.com 'unsafe-eval' 'nonce-12345678'; connect-src 'self'; style-src http: 'unsafe-inline';"
referrer: ""
sourceFile: ""
statusCode: 200
target: document
timeStamp: 1390192192606
type: "securitypolicyviolation"
violatedDirective: "script-src http://static.jsbin.com 'unsafe-eval' 'nonce-12345678'"
__proto__: SecurityPolicyViolationEvent
[removed base Event parameters]

e i documenti dicono che sono richieste le seguenti proprietà:

readonly attribute DOMString documentURI;
readonly attribute DOMString referrer;
readonly attribute DOMString blockedURI;
readonly attribute DOMString violatedDirective;
readonly attribute DOMString effectiveDirective;
readonly attribute DOMString originalPolicy;
readonly attribute DOMString sourceFile;
readonly attribute long      lineNumber;
readonly attribute long      columnNumber;
    
risposta data 20.01.2014 - 03:22
fonte
1

Tidalwave ha dato una risposta eccellente.

Tuttavia, puoi farlo funzionare su sviluppatore di Chrome Version 28.0.1490.2, dopo aver attivato "Funzionalità di Webkit sperimentali" su chrome: // flags. In questo modo, puoi utilizzare questo sintassi senza alcuna modifica.

Ho ricevuto questa risposta dallo sviluppatore di questa funzione su Chromium e ha avvertito che la sintassi potrebbe cambiare in futuro.

    
risposta data 01.05.2013 - 05:56
fonte

Leggi altre domande sui tag