Quand est-il sécuritaire pour permettre la SCRO?
Je suis en train d'élaborer un JSON/REST API web, pour lequel j'ai particulièrement envie de tiers sites web pour être en mesure de faire appel à mon service grâce à AJAX. Donc, mon service est l'envoi de la célèbre SCRO-tête:
Access-Control-Allow-Origin: *
Qui permet à des sites tiers d'appeler mon service grâce à AJAX. Tout va bien jusqu'à présent.
Cependant, un paragraphe de mon api web est non-public et requiert une authentification (chose assez standard avec OAuth et un access_token cookie). Est-il sécuritaire pour permettre la SCRO sur cette partie de mon site?
D'une part, ce serait cool si les sites web de tiers pourrait avoir ajax clients qui interagissent aussi avec cette partie de mon service. Cependant, la raison pour laquelle il y a une même origine, en premier lieu, c'est que cela peut être risqué. Vous ne voulez pas de tout site web que vous visitez par la suite pour être en mesure d'accéder à votre contenu privé.
Le scénario que j'ai peur c'est qu'un utilisateur se connecte sur mon site web api, soit sur le site ou par l'intermédiaire d'un site web en qui il a confiance, et il oublie de se déconnecter. Sera-ce de permettre à tout autre site web qu'il vistes par la suite pour accéder à son contenu à l'aide de la session existante?
Donc mes questions:
- Est-il jamais à l'abri d'activer la SCRO sur la non-contenu public?
- Si un SCRO activé serveur définit un session_token par le biais d'un cookie, ce cookie soit enregistré dans le domaine de la SCRO serveur ou web principal-page serveur?
- Notez que vous pouvez seulement envoyer de la SCRO-têtes sur les ressources que vous voulez accès à d'autres personnes d'autres origines. Et vous pouvez également limiter la SCRO uniquement l'accès aux origines que vous attendez d'utilisation.
- Idéalement, je voudrais que toutes les ressources pour être accessible à partir de n'importe quelle origine, si la sécurité le permet. Il est encore à l'utilisateur de fournir des informations d'identification valides. Je veux juste m'assurer que je ne suis pas d'ouvrir la porte pour le cross-site scripting attaques contre les sites web malveillants.
Vous devez vous connecter pour publier un commentaire.
En réponse à votre deuxième question (Si un SCRO activé serveur définit un session_token par le biais d'un cookie...?), le cookie est enregistré sous le domaine de la SCRO serveur. La page web principale du code JS ne peut pas accéder au cookie, même via
document.cookie
. Le cookie n'est envoyé au serveur lorsque le.withCredentials
propriété est définie, et même alors, il n'est acceptée que lorsque le serveur définit leAccess-Control-Allow-Credentials
en-tête.Votre première question est un peu plus ouvert. Il est assez sûr, mais il ya des façons de contourner les choses. Par exemple, un attaquant pourrait utiliser un empoisonnement DNS technique à cause d'un contrôle en amont de la demande de frapper le serveur réel, mais envoyer les CORS demande au serveur rogue. Voici quelques ressources sur la SCRO de sécurité:
Enfin, votre préoccupation est d'environ donnant tout site web accès à vos CORS de données. Afin de se protéger contre cela, vous ne devez pas utiliser le
Access-Control-Allow-Origin: *
en-tête. Au lieu de cela, vous devez renvoyer l'utilisateur à l'Origine de la valeur. Par exemple:Cet en-tête vous permet de
http://www.example.com
pour accéder aux données de réponse.L'intention de la SCRO est de permettre à la croix-de l'origine des demandes pour demandes XHR tout en donnant le serveur de l'autorité de préciser de quelle origine est l'accès à une ressource. En particulier, la SCRO a présenté le Origine champ d'en-tête qui permet au serveur de dire régulière et possible XHR demandes d'intervalle. Ce champ d'en-tête ne peut pas être défini ou modifié par l'utilisateur, mais elle est définie par le navigateur pour les demandes XHR.
Donc si vous avez une API qui est conçu pour être utilisé uniquement par XHR, vous pouvez (et devriez) exiger que la demande pour se conformer à la SCRO. Surtout si la demande peut également modifier l'état de votre serveur car sinon vous serait vulnérable à CSRF.
Note les attaques CSRF sont possibles indépendamment de la SCRO à l'aide d'autres méthodes de forge GET et POST demandes. La SCRO ne fait qu'activer l'accès à la réponse du serveur de demandes XHR avec JavaScript si le serveur le permet.