2017-01-10 1 views
2

J'ai rencontré un problème avec le réglage de l'en-tête "X-Content-Type-Options: nosniff" sur les fichiers statiques (js, css, jpg, gif, ...) sur mon compartiment Amazon S3. Quand j'essaie de l'ajouter, il me dit: "Les clés de métadonnées définies par l'utilisateur doivent commencer par x-amz-meta-."Comment configurer "X-Content-Type-Options: nosniff" sur Amazon S3?

Comment faire? Dois-je faire "x-amz-méta-X-Content-Type-Options"

Merci à l'avance!

Répondre

3

métadonnées définies par l'utilisateur doit en effet commencer par x-amz-meta-* mais cela ne vous aidera pas - ils sont aussi retournés comme x-amz-meta-* têtes lorsque l'objet est tiré par les cheveux, et x-amz-meta-X-Content-Type-Options ne seront pas reconnus par les navigateurs.

S3 a un support très limité pour les en-têtes qui ne commencent pas par x-amz-meta-*. Content-Type et Content-Disposition et Content-Encoding sont valides, mais la plupart des autres ne le sont pas. Comme this support forum postthis support forum post indique (et le test confirme) si de tels en-têtes sont ajoutés au téléchargement (en travaillant directement avec l'API S3), ils sont simplement ignorés. Ils ne sont pas stockés et ne sont pas retournés avec la réponse. Une exception connue mais non documentée est X-Robots-Tag, que S3 accepte et retournera avec la réponse, bien que la console AWS ne vous laissera pas éditer si vous l'ajoutez en utilisant l'API. Une solution de contournement qui devrait bientôt être disponible est [email protected], qui est une intégration entre Lambda et CloudFront, où la fonction Lambda s'exécute dans le réseau CloudFront et peut modifier les en-têtes de demande et de réponse dans CloudFront ... et de Bien sûr, CloudFront s'intègre bien avec S3, donc cela pourrait être une option viable une fois que Lambda @ Edge sera disponible.

J'ai testé ce (je me suis inscrit pour l'aperçu de Lambda @ Edge. Je ne l'ai pas officiellement entendu parler que j'avais obtenu l'accès, mais il semble fonctionner.)

En utilisant ce code de fonction Lambda :

'use strict'; 
exports.handler = (event, context, callback) => { 
    const response = event.Records[0].cf.response; 
    const headers = response.headers; 
    headers['X-Content-Type-Options'] = ['nosniff']; 
    callback(null, response); 
}; 

... donne cette réponse ...

$ curl -v http://dxxxexample.cloudfront.net/robots.txt 
* Hostname was NOT found in DNS cache 
* Trying x.x.x.x... 
* Connected to dxxxexample.cloudfront.net (x.x.x.x) port 80 (#0) 
> GET /robots.txt HTTP/1.1 
> User-Agent: curl/7.35.0 
> Host: dxxxexample.cloudfront.net 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Content-Type: text/plain 
< Content-Length: 324 
< Connection: keep-alive 
< Date: Tue, 10 Jan 2017 20:38:33 GMT 
< Last-Modified: Tue, 10 Jan 2017 17:13:36 GMT 
< ETag: "dbe2f9a267e8ef192f0fdf0c888da01c" 
< Cache-Control: no-cache 
< Accept-Ranges: bytes 
* Server AmazonS3 is not blacklisted 
< Server: AmazonS3 
< Via: 1.1 xxxxxxxxxx.cloudfront.net (CloudFront) 
< X-Content-Type-Options: nosniff 
< X-Cache: Miss from cloudfront 
< X-Amz-Cf-Id: xxxxx 
< 
User-agent: * 
Disallow:/

... donc cela semble être une solution viable.

J'ai configuré cette fonction pour déclencher sur "Viewer Response" (le déclencheur déclenche pour permettre de modifier la réponse avant que la réponse ne soit retournée de CloudFront au navigateur) mais en fait elle pourrait probablement déclencher "Origin Response" à l'inverse, contrairement à l'exemple ci-dessus, vous n'avez pas utilisé Cache-Control: no-cache, comme je l'ai fait dans mon test, mais j'ai utilisé /robots.txt simplement parce que je l'avais déjà installé dans un seau avec CloudFront et Lambda - évidemment, ce fichier n'est pas une application particulièrement intéressante pour X-Content-Type-Options mais comme vous pouvez le voir, cela fonctionne).

Je ne sais pas quand Lambda @ Edge sortira de l'aperçu.

Si vous souhaitez soumettre cette demande en tant que fonctionnalité pour S3, vous pouvez contacter votre responsable de compte AWS si vous en avez un, ou le publier sur les forums de support AWS. (Je ne suis pas affilié à AWS).

+0

Enfer ... contactera Amazon pour demander leur plan. Merci ! – MathKimRobin

+0

Merci, j'espère qu'ils vont changer leurs plans. Pour l'instant ... pas d'autre choix: s Merci encore! – MathKimRobin