Quels sont les risques pour la sécurité de paramètre Access-Control-Allow-Origin?
J'ai récemment eu à définir Access-Control-Allow-Origin
à *
afin d'être en mesure de faire des sous-domaine des appels ajax.
Maintenant, je ne peux pas aider mais sentir que je suis en train de mettre mon environnement à des risques de sécurité.
S'il vous plaît aidez-moi si je me fais mal.
Vous devez vous connecter pour publier un commentaire.
En répondant avec
Access-Control-Allow-Origin: *
, la ressource demandée permet de partager avec toutes origines. Cela signifie essentiellement que tout site peut envoyer une demande XHR pour votre site et d'accéder à la réponse du serveur qui ne serait pas le cas si vous n'aviez pas mis en œuvre cette réponse de la SCRO.De sorte que tout site peut faire une demande à votre site pour le compte de leurs visiteurs et les processus de sa réponse. Si vous avez quelque chose de mis en œuvre comme une authentification ou régime d'autorisation qui est basé sur quelque chose qui est fourni automatiquement par le navigateur (cookies, les cookies de sessions, etc.), les demandes déclenchée par les sites de tiers qui utilisent eux aussi.
Cela pose un risque pour la sécurité, en particulier si vous autorisez le partage des ressources non seulement pour les ressources sélectionnées, mais pour chaque ressource. Dans ce contexte, vous devriez jeter un oeil à Quand est-il sécuritaire pour permettre la SCRO?.
Access-Control-Allow-Origin: *
sur eux? Il n'y aura pas nogin etc, ils sont publics pour tout le monde?Access-Control-Allow-Origin: *
moi-même, c'est pourquoi je cherchais à ce Q&A. I. e. Je ne sais pas quelle était la bonne réponse, mais je serais intéresséAccess-Control-Allow-Origin: *
est totalement sûr à ajouter à n'importe quelle ressource, sauf cette ressource contient des données privées protégées par quelque chose d'autre que les identifiants de connexion (cookies, basic auth TLS certificats client).Par exemple: les Données protégées par des cookies est sûr
Imaginer
https://example.com/users-private-data
, ce qui peut exposer des données privées en fonction de l'utilisateur connecté dans l'état. Cet état utilise un cookie de session. C'est sûr pour ajouterAccess-Control-Allow-Origin: *
à cette ressource, que cet en-tête permet uniquement l'accès à la réponse, si la demande est faite sans les cookies et les cookies sont nécessaires pour obtenir les données privées. Comme un résultat, pas de données personnelles est une fuite.Par exemple: les Données protégées par emplacement /ip /réseau interne n'est pas sûr (malheureusement fréquentes avec les intranets et les appareils ménagers):
Imaginer
https://intranet.example.com/company-private-data
, ce qui expose les données privées de la société, mais ce ne peut être accessible que si vous êtes sur la société du réseau wifi. C'est pas sûr pour ajouterAccess-Control-Allow-Origin: *
à cette ressource, car il est protégé à l'aide de quelque chose d'autre que les informations d'identification. Sinon, un mauvais script pourrait vous utiliser comme un tunnel à l'intranet.Règle de pouce
Imaginer ce qu'un utilisateur de voir si elles ont eu accès à la ressource dans une fenêtre de navigation privée. Si vous êtes heureux avec tout le monde de voir ce contenu (y compris le code source du navigateur reçu), il est sûr d'ajouter
Access-Control-Allow-Origin: *
.Access-Control-Allow-Origin: *
autorise seulement des requêtes sans cookies. J'ai édité la réponse de clarifier un peu.Autant que je sache, Access-Control-Allow-Origin est juste un en-tête http envoyé par le serveur au navigateur. La limiter à une adresse spécifique (ou le désactiver) ne permet pas de rendre votre site plus sûr pour, par exemple, des robots. Si les robots veulent, ils peuvent simplement ignorer l'en-tête. Le régulier navigateurs (Explorer, Chrome, etc.) par défaut, l'honneur de l'en-tête. Mais une application comme Facteur simplement les ignorer.
La fin du serveur n'est pas réellement vérifier ce que l' 'origine-est de la demande lorsqu'il renvoie la réponse. Il ajoute juste l'en-tête http. C'est le navigateur (le client final), qui a envoyé la demande qui décide de lire l'accès en-tête de contrôle et d'agir sur elle. Notez que dans le cas de XHR il peut utiliser un spécial "OPTIONS" demande de poser pour les en-têtes de premier.
Donc, n'importe qui avec creative script capacités peuvent facilement ignorer l'ensemble de la tête, tout ce qui est mis en elle.
Voir aussi D'éventuels problèmes de sécurité de paramètre Access-Control-Allow-Origin.
Maintenant pour répondre à la question
Si quelqu'un veut vous attaquer, ils peuvent facilement contourner les Access-Control-Allow-Origin. Mais en permettant '*' vous faire donner à l'attaquant un peu plus de " vecteurs d'attaque pour jouer avec, comme, l'utilisation de navigateurs internet, que l'honneur que l'en-tête HTTP.
Access-Control-Allow-Origin *
sur un site web malveillant qui héberge des scripts pour voler des mots de passe est fortement déconseillée 🙂Someone can set up a malicious webpage
- oui, et que quelqu'un va ajouter de la méchante de la directive, trop. Et encore, pour le client comme un infecté webbrowser - peut choisir d'ignorer les en-têtes http de tout ce qui est en eux.192.168.1.1
) et de reconfigurer votre routeur pour permettre à des attaques. Il peut même utiliser votre routeur directement comme un DDoS nœud. (La plupart des routeurs ont des pages de test qui permettent de pings ou simple serveur HTTP contrôles. Ceux-ci peuvent être victimes de violence en masse.)Voici 2 exemples posté des commentaires, quand un générique est vraiment problématique:
– Brad
– Brad
J'ai l'impression que ces commentaires doivent avoir été des réponses, parce qu'ils expliquer le problème avec un exemple réel.