Mentre lo scripting cross-site è generalmente considerato negativo, ho incontrato diverse situazioni in cui è necessario.Best practice: legittima cross-site scripting
recentemente stavo lavorando all'interno dei confini di un sistema di gestione dei contenuti molto limitante. Avevo bisogno di includere il codice del database all'interno della pagina, ma il server di hosting non aveva nulla di utilizzabile disponibile. Ho creato un paio di script bare-bones sul mio server, originariamente pensando che avrei potuto usare AJAX per importare i contenuti dei miei script direttamente nel template del CMS (conservando così immagini dinamiche, voci di menu, CSS, ecc.). Mi sbagliavo.
A causa delle limitazioni di XMLHttpRequest
oggetti, non è possibile afferrare il contenuto da un dominio diverso. Così ho pensato iFrame - anche se non sono un fan dei frame, ho pensato che avrei potuto creare una cornice che corrispondesse alla larghezza e all'altezza del contenuto, in modo che appaia nativa. Di nuovo, sono stato bloccato da "protezioni" di scripting cross-site. Mentre potrei effettivamente caricare un file remoto nel iFrame, non ho potuto eseguire JavaScript per modificare le sue dimensioni sulla pagina host o nella pagina caricata.
In questo scenario particolare, non ero in grado di puntare un sottodominio al mio server. Inoltre, non sono riuscito a creare uno script sul server CMS in grado di eseguire il proxy del contenuto dal mio server, quindi il mio ultimo pensiero è stato quello di utilizzare un codice JavaScript remoto.
funziona Un JavaScript remoto. Si interrompe quando l'utente ha disabilitato JavaScript, che è uno svantaggio; ma funziona Il "problema" che stavo usando con un JavaScript remoto era che dovevo usare la funzione JS document.write()
per stampare qualsiasi contenuto. Qualsiasi output che non sia JS causa errori di script. Oltre all'utilizzo di document.write()
per ogni riga, è inoltre necessario assicurarsi che il contenuto sia sfuggito, altrimenti si avranno più errori di script.
mia soluzione è stata la seguente:
Il mio script ha ricevuto un parametro GET ("pagina") e poi guardò per il file ({$page}.php
), e leggere il contenuto in una variabile. Tuttavia, ho dovuto utilizzare le tecniche di buffering per eseguire effettivamente gli script inclusi (per cose come l'interazione con il database), quindi rimuovere il contenuto finale di tutti i caratteri di interruzione di riga (\n
) seguito dall'escaping di tutti i caratteri richiesti. Il risultato finale è che il mio script originale (che emette JavaScript) accede a script apparentemente "standard" sul mio server e converte il loro output standard in JavaScript per la visualizzazione all'interno del modello CMS.
Anche se questa soluzione funziona, sembra che ci può essere un modo migliore per ottenere la stessa cosa. Qual è il modo migliore per fare in modo che lo scripting cross-site funzioni in modo specifico allo scopo di includere contenuti da un dominio completamente diverso?
Vuoi chiarire # 2? Per dataType 'html', come in load(), jQuery usa XMLHttpRequest, che non funziona cross-site. Inoltre, load() rimuove i tag di script. –
Mi spiace, quello che intendevo per # 2 sta usando JSONP http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29 –