php - sheet - xss test online




Meilleure pratique: Scripts Cross-Site légitimes (4)

Alors que les scripts inter-sites sont généralement considérés comme négatifs, j'ai rencontré plusieurs situations où cela est nécessaire.

Je travaillais récemment dans le cadre d'un système de gestion de contenu très restrictif. J'avais besoin d'inclure du code de base de données dans la page, mais le serveur d'hébergement n'avait rien d'utilisable. J'ai mis en place quelques scripts bare-bones sur mon propre serveur, pensant à l'origine que je pourrais utiliser AJAX pour importer le contenu de mes scripts directement dans le template du CMS (conservant ainsi des images dynamiques, des éléments de menu, CSS, etc.). J'avais tort.

En raison des limitations des objets XMLHttpRequest , il n'est pas possible d'extraire du contenu d'un domaine différent. Donc je pensais iFrame - même si je ne suis pas un fan de cadres, j'ai pensé que je pourrais créer un cadre qui correspond à la largeur et la hauteur du contenu, de sorte qu'il semble natif. Encore une fois, j'étais bloqué par des «protections» de script inter-site. Bien que je puisse effectivement charger un fichier distant dans l' iFrame , je ne pouvais pas exécuter JavaScript pour modifier sa taille sur la page hôte ou dans la page chargée.

Dans ce scénario particulier, je n'étais pas en mesure de pointer un sous-domaine vers mon serveur. Je ne pouvais pas non plus créer un script sur le serveur CMS qui pourrait être un proxy du contenu de mon serveur, donc ma dernière pensée était d'utiliser un JavaScript distant.

Un JavaScript à distance fonctionne. Il se brise lorsque l'utilisateur a JavaScript désactivé, ce qui est un inconvénient; mais ça marche. Le "problème" que j'avais avec l'utilisation d'un JavaScript distant était que je devais utiliser la fonction JS document.write() pour sortir n'importe quel contenu. Toute sortie qui n'est pas JS provoque des erreurs de script. En plus d'utiliser document.write() pour chaque ligne, vous devez également vous assurer que le contenu est échappé - sinon vous vous retrouverez avec plus d'erreurs de script.

Ma solution était la suivante:

Mon script a reçu un paramètre GET ("page"), puis a recherché le fichier ( {$page}.php ) et en a lu le contenu dans une variable. Cependant, j'ai dû utiliser des techniques de mise en tampon maladroites afin d'exécuter les scripts inclus (pour des choses comme l'interaction de base de données) puis dépouiller le contenu final de tous les caractères de saut de ligne ( \n ), puis échapper tous les caractères requis. Le résultat final est que mon script original (qui génère JavaScript) accède à des scripts apparemment "standard" sur mon serveur et convertit leur sortie standard en JavaScript pour l'afficher dans le modèle CMS.

Bien que cette solution fonctionne, il semble qu'il pourrait y avoir une meilleure façon d'accomplir la même chose. Quelle est la meilleure façon de faire fonctionner les scripts inter-sites spécifiquement dans le but d'inclure du contenu provenant d'un domaine complètement différent?


Personnellement, je voudrais appeler cet autre domaine sur le serveur et obtenir et analyser les données là pour une utilisation dans votre page. De cette façon, vous évitez tout problème et vous obtenez la puissance d'un langage / plateforme côté serveur pour obtenir et analyser les données.

Je ne sais pas si cela fonctionnerait pour votre scénario spécifique ... difficile à savoir même avec votre description verbeuse ...


J'ai déjà rencontré ce script de proxy côté serveur YDN . Il dit qu'il est conçu pour fonctionner avec les API de recherche de Yahoo.

Cela fonctionnera-t-il avec n'importe quel domaine, si vous supprimez simplement le code de l'API Yahoo? Ou avez-vous besoin de le remplacer par le domaine avec lequel vous voulez qu'il fonctionne?


Vous pouvez essayer easyXDM , en incluant très peu de code, vous pouvez passer des appels de données ou de méthodes entre des documents de différents domaines.


Le contenu distant iframe peut être consulté par le javascript local.

Le serveur distant doit simplement définir le document.domain de la page.

Par exemple:

Le site A contient un iframe avec src='Site B/home.php'

home.php ressemble à ceci:

[php stuff]...[/php]
[script type='text/javascript']document.domain='Site A'[/script]






xss