Mezzi per lo scripting cross-site (legittimo)

5

Esistono buoni mezzi per consentire agli script di due o più domini di collaborare nella stessa pagina del browser? Voglio creare una piattaforma estensibile, in cui fornisco il modello e alcune visualizzazioni, ma anche che consenta a terzi di creare le proprie visualizzazioni. L'idea è che tutta la manipolazione del modello verrà effettuata tramite la sua API e solo il modello comunicherà al server (principale), ma gli utenti potranno includere script di altri domini che usano anche quell'API (questi script potrebbero "chiamare casa"). "se vogliono però).

So che molti siti lo fanno già, ad esempio quando usano una CDN per fornire librerie come jQuery. Tuttavia, ricordo anche di aver letto che quelle librerie dovevano essere "modificate" in qualche modo in modo da non essere confuse dagli attacchi XSS, anche se non riuscivo a trovare più informazioni sull'argomento. Ho solo una conoscenza superficiale di come i browser isolano i contenuti per diversi domini e in che misura si verifica l'isolamento, quindi alcuni indicatori in quella direzione sarebbero molto graditi.

Sono anche a conoscenza del metodo utilizzato per utilizzare iframe per caricare contenuti "non attendibili" e sembra che la comunicazione tra la pagina principale e i suoi iframe sia abbastanza semplice . Preferirei non usare questo metodo, ma lo farò se ci sono buoni vantaggi in termini di sicurezza. Tuttavia, non sono sicuro se questo è il caso, dal momento che l'iframe può chiamare metodi arbitrari sulla pagina padre ... ( Modifica : da quello che ho capito del commento di Florian Margaine, il metodo nella domanda collegata funziona solo per iframe di origine identica, è corretto? In tal caso, ora vedo i vantaggi della sicurezza) Qualcuno con esperienza in materia può dirmi come funziona?

Queste sono le uniche opzioni che conosco, anche altri suggerimenti sono ben accetti. Vorrei anche notare che, mentre ci deve essere un certo livello di fiducia tra l'utente e la terza parte che fornisce lo script (poiché il suo vero scopo è manipolare il modello di proprietà di quell'utente), ogni utente sarà libero di scegliere le estensioni a suo piacimento (cioè gli script disponibili non saranno limitati a quelli che ho precedentemente valutato e approvato), quindi qualsiasi mezzo per mitigare i problemi di sicurezza per gli utenti sono i benvenuti.

Modifica: Vorrei chiarire un po 'la domanda. L'obiettivo qui non è quello di fare richieste HTTP ad altri domini, semplicemente per avere un migliore controllo di ciò che i diversi script fanno alla stessa pagina. Da quanto ho capito finora della stessa politica di origine, diverse pagine non possono comunicare tra loro a meno che non provengano dallo stesso dominio, ma script nella stessa pagina ma provenienti da domini diversi può fare tutto ciò che vuole. È corretto? (se lo è, allora suppongo che la mia domanda sia discutibile ...)

    
posta mgibsonbr 18.05.2012 - 21:19
fonte

1 risposta

3

Puoi utilizzare JSONP . Non è così difficile scrivere una piccola funzione da soli, ecco un piccolo esempio da uno dei miei siti;

function ecbCreateScript(url, callback) {
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;

    script.onreadystatechange = loadEcbForm;
    script.onload = loadEcbForm;

    // fire the loading
    head.appendChild(script);
}
    
risposta data 18.05.2012 - 21:57
fonte

Leggi altre domande sui tag