Il semble que la seule façon d'assurer notre contenu est de vérifier l'URL de la page d'accueil de notre javascript correspond à la site abonné.
Ah, mais dans le code côté client ou côté serveur?
Ils ont tous deux leurs inconvénients. Le faire avec du code côté serveur n'est pas fiable car certains navigateurs ne passeront pas du tout l'en-tête Referer
, et si vous voulez arrêter les caches en conservant une copie du script, empêchant ainsi le contrôle Referer, vous devez servir avec nocache ou Vary: Referer
en-têtes, ce qui nuirait à la performance. En revanche, avec les contrôles côté client dans le script que vous renvoyez, vous ne pouvez pas être sûr que l'environnement dans lequel vous exécutez n'a pas été saboté.Par exemple, si votre balise de script d'inclusion était comme:
<script src="http://include.example.com/includescript?myid=123"></script>
et votre script côté serveur regardé 123
comme l'ID pour un client en utilisant le domaine customersite.foo
, il pourrait répondre avec le script:
if (location.host.slice(-16)==='customersite.foo') {
// main body of script
} else {
alert('Sorry, this site is not licensed to include content from example.com');
}
Ce qui semble assez simple, sauf que le site inclus pourrait avoir remplacé String.prototype.slice
avec une fonction qui retournait toujours customersite.foo
. Ou diverses autres fonctions utilisées dans le corps du script peuvent être suspectes. L'inclusion d'un <script>
d'un autre contexte de sécurité va dans les deux sens: le site-include doit faire confiance au site-source pour ne rien faire de mal dans leur contexte de sécurité comme voler des mots de passe ou remplacer la page par un gros chèvre; mais, de la même manière, le code du site source n'est qu'un invité dans le contexte de sécurité potentiellement malveillant. Une certaine confiance doit donc exister entre les deux parties lorsqu'un site comprend un script d'un autre; le contrôle de domaine ne sera jamais un mécanisme de sécurité 100% infaillible. Je voudrais inclure une feuille de style si possible pour styliser l'élément mais je ne suis pas sûr si je peux le charger avec le javascript. Vous pouvez certainement ajouter des éléments de style à l'élément head du document, mais vous aurez besoin d'un espace de nom fort pour vous assurer qu'il n'interfère pas avec les autres styles de page. Vous préférerez peut-être utiliser des styles en ligne pour plus de simplicité et éviter les interférences de la feuille de style principale de la page. Cela dépend vraiment si vous voulez que votre contenu généré fasse partie de la page hôte (dans ce cas, vous préférerez peut-être laisser le site inclus traiter des styles qu'ils voulaient pour lui-même), ou si vous voulez qu'il se trouve seul, non affecté par le contexte (dans ce cas, vous feriez mieux de mettre votre contenu dans un avec ses propres styles).
Je pense à l'aide jquery de sorte que le fichier include devrait d'abord faire appel à jquery
Je voudrais essayer d'éviter de tirer jQuery dans la page d'accueil. Même avec noconflict
, il peut y avoir des conflits avec d'autres scripts qui ne s'y attendent pas, en particulier des scripts complexes comme les autres frameworks. Exécuter deux cadres sur la même page est une recette pour des erreurs étranges.
(Si vous avez pris la route , d'autre part, vous obtenez votre propre contexte de script pour jouer avec, il ne serait pas un problème.)
+1 Bienvenue sur Stack Overflow, Mike! – Sampson
Merci Jonathan, j'ai trouvé quelques bons conseils sur le site – Mike