J'exécute un serveur Web local uniquement (intégré à PHP) pour tous mes panneaux d'administration et ainsi de suite sur ma machine. Je crains que, si une page Web aléatoire possède un extrait JavaScript qui fait un appel Ajax à http://127.0.0.1/private.txt , et que je visite cette page Web, cela rendra mon navigateur (Firefox) récupérer toutes les données renvoyées depuis cette URL et pouvoir les utiliser, par exemple pour les renvoyer à leur propre serveur dans une autre requête Ajax.
Supposons que http://127.0.0.1/private.txt renvoie l'intégralité de mon journal depuis 1958. Ou tout ce qui est également sensible. Je ne veux certainement pas qu'il interagisse avec autre chose que mon navigateur Firefox, mais d'après ce que je peux en déduire, cela pourrait être un énorme problème de confidentialité/sécurité. J'espère que je me trompe sur mon hypothèse que cette demande serait autorisée. J'espère qu'il a une sorte de "politique inter-domaines" le bloquant ou quelque chose. D'autant plus que c'est de la version 127.0.0.1, ce qui devrait être une sorte de cas spécial.
Qu'est-ce qui l'empêcherait de faire cela? Qu'est-ce qui me manque dans mon raisonnement?
Partage de ressources d'origine croisée CORS et la même politique d'origine SOP sont vos amis ici . Étant donné que le javascript en question n'est pas hébergé par http://127.0.0.1
, il ne fonctionnera pas avec le SOP et les règles par défaut pour CORS dans les navigateurs empêcheront le javascript de de lire Cela répond à votre question immédiate - vous êtes protégé par défaut.
Cependant, cette partie "lecture" est la clé. Le navigateur fera en toutes circonstances la demande au serveur. La seule chose que CORS fait est d'empêcher le JavaScript de recevoir la réponse. En tant que tel, CORS empêche un attaquant de lire des données d'ailleurs, mais ne l'empêche pas d'envoyer des données ailleurs.
Par conséquent, si votre application devait apporter des changements d'état importants en raison de la réception d'une demande, vous pourriez vous retrouver avec des problèmes. Utilement, les jetons CSRF vous protégeraient contre de telles attaques. Pour être clair, JavaScript n'est même pas nécessaire pour qu'un attaquant envoie une demande ailleurs ( h/t mti2935 ) - une balise img
incorporée sur une page que vous visitez peut déclencher un GET
à n'importe quel serveur, ce qui rend particulièrement facile pour les attaquants de déclencher des actions indésirables si votre serveur prend des mesures à la suite d'une demande GET
.
Par conséquent, si votre application modifie l'état sans protection CSRF et que l'attaquant connaît le point de terminaison, vous pouvez avoir des problèmes. Pour un exemple réel, des routeurs non sécurisés et couramment utilisés ont été exploités de cette manière. Considérez cette URL hypothétique dans l'application Web hébergée par un routeur domestique:
http://admin:[email protected]/enable_remote_admin_access
Il permet un accès administrateur à distance (aka ajuste la configuration pour que les gens puissent se connecter à la section admin du routeur depuis Internet), il a une URL bien connue, il nécessite une authentification de base et le routeur est livré avec un nom d'utilisateur et un mot de passe par défaut bien connus (admin: admin). En conséquence, un attaquant crée une page Web qui envoie une simple requête GET
à l'URL ci-dessus. L'attaquant n'obtiendra pas de réponse du routeur (à cause de CORS), mais le routeur reçoit toujours la demande et s'il est vulnérable, il est maintenant prêt à accepter les connexions administrateur d'Internet. Le script malveillant téléphone ensuite à la maison avec l'adresse IP des victimes et un autre script rapide vérifie leur adresse IP pour voir s'il y a maintenant un routeur accessible. Si c'est le cas, l'attaquant a silencieusement pris le contrôle total du réseau domestique de la victime simplement parce qu'il a visité la mauvaise page et utilise un routeur commun et vulnérable.
Bien sûr, une application personnalisée est beaucoup plus difficile à exploiter, car il s'agit d'une attaque aveugle. Sans informations sur ce qu'ils attaquent, il est presque impossible de réussir. En conséquence, le niveau de risque pratique est probablement faible car la surface d'attaque est si petite. Pourtant, voici quelques mises en garde à garder à l'esprit: