2017-10-01 2 views
1

J'ai un seau sur S3 avec tout ce public et la configuration CORS suivante:S3 CORS Configuration: la restriction à des domaines spécifiques n'a aucun effet?

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
<CORSRule> 
    <AllowedOrigin>http://example.com</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <AllowedHeader>*</AllowedHeader> 
</CORSRule> 
<CORSRule> 
    <AllowedOrigin>http://localhost:3333</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <AllowedHeader>*</AllowedHeader> 
</CORSRule> 
</CORSConfiguration> 

Avec cette configuration, je me attendrais à ne être en mesure d'obtenir des objets lors d'une demande de http://example.com ou http://localhost:3333, et recevoir 403 lors de la liaison à des URL dans ce compartiment à partir d'autres domaines. En l'état, je peux toujours créer un lien vers les fichiers audio et image de ce compartiment à partir de http://dev.example.com ainsi que de http://localhost:4444.

Qu'est-ce que je fais mal?

Répondre

1

La définition de la configuration CORS sur un compartiment n'empêchera personne d'intégrer des images ou de l'audio provenant de ce compartiment, et ne provoquera aucune demande de refus du compartiment. Vous ne pouvez pas faire cela uniquement via la configuration CORS.

Les navigateurs sont l'endroit où toutes les restrictions d'origines croisées sont réellement appliquées, et les navigateurs autorisent l'intégration d'URL d'origine croisée pour l'audio et les images dans n'importe quel document, sans tenir compte des paramètres CORS.

Par défaut, les navigateurs n'autorisent pas le code JavaScript frontal à accéder aux réponses des demandes d'origines croisées effectuées avec XHR ou les méthodes Fetch ou Ajax des bibliothèques JavaScript. C'est le seul endroit où CORS intervient. Il n'affecte pas le comportement pour l'intégration normale d'origine audio et d'images. Au lieu de cela, il vous permet, du côté du serveur, de dire aux navigateurs de quelle origine vous voulez débloquer XHR/Fetch/Ajax demandes à partir de.

Et tout ce que votre seau fait différemment lorsqu'il est configuré avec la prise en charge CORS est simplement d'envoyer l'en-tête de réponse Access-Control-Allow-Origin et d'autres en-têtes de réponse CORS. C'est tout.

L'application ou l'assouplissement effectif des restrictions d'origine croisée est effectué par les navigateurs du côté client - et non du côté serveur par votre compartiment. En d'autres termes, en ce qui concerne la configuration de CORS, ce que vous définissez dans votre compartiment est essentiellement une information consultative que les navigateurs peuvent utiliser. Ainsi, quelle que soit la configuration CORS que vous faites dans le compartiment, il continue à accepter les demandes de tous les clients et origines; En d'autres termes, tous les clients de toutes les origines continuent d'obtenir des réponses comme ils le feraient autrement.

Mais navigateurs ne fera que exposer les réponses par votre seau à une demande croisée d'origine de frontend code JavaScript en cours d'exécution à une origine particulière si votre seau est réglé sur opt-in pour permettre la demande en répondant avec un en-tête Access-Control-Allow-Origin que permet cette origine.

C'est le seul effet que vous pouvez provoquer avec la configuration CORS sur le godet. Vous ne pouvez pas simplement utiliser la configuration de CORS, mais seulement autoriser les fichiers audio ou d'image qu'il sert à être intégrés uniquement par des origines particulières. Pour ce faire, vous devez utiliser autre chose que la configuration CORS.