我在我的Amazon S3存儲桶上的靜態文件(js,css,jpg,gif,...)上遇到了設置標題「X-Content-Type-Options:nosniff」的問題。如何在Amazon S3上設置「X-Content-Type-Options:nosniff」?
當我嘗試添加它時,它對我說:「用戶定義的元數據鍵必須以x-amz-meta-開頭。」
如何做到這一點?我應該做的 「X-AMZ-元-X-Content-Type的選項」
提前感謝!
我在我的Amazon S3存儲桶上的靜態文件(js,css,jpg,gif,...)上遇到了設置標題「X-Content-Type-Options:nosniff」的問題。如何在Amazon S3上設置「X-Content-Type-Options:nosniff」?
當我嘗試添加它時,它對我說:「用戶定義的元數據鍵必須以x-amz-meta-開頭。」
如何做到這一點?我應該做的 「X-AMZ-元-X-Content-Type的選項」
提前感謝!
用戶定義的元數據確實必須以x-amz-meta-*
但是這不會幫助你 - 他們也是返回爲x-amz-meta-*
頭時,對象是牽強,而x-amz-meta-X-Content-Type-Options
不會被瀏覽器識別。
S3對於不以x-amz-meta-*
開頭的標頭提供非常有限的支持。 Content-Type
和Content-Disposition
和Content-Encoding
是有效的,但大多數不是。
由於this support forum post表明(並且測試確認)這些頭文件是否被添加到上傳文件中(當直接使用S3 API時),它們將被忽略。它們不被存儲,並且不會與響應一起返回。
一個已知但未公開的例外是X-Robots-Tag
,S3確實接受並將返回響應,儘管如果使用API添加它,AWS控制檯將不允許您編輯它。
應該立即可用的一種可能的解決方法是[email protected],它是Lambda和CloudFront之間的集成,其中Lambda函數在CloudFront網絡中運行,並且可以修改CloudFront內外的請求和響應標頭以及當然,CloudFront與S3完美集成,所以一旦Lambda @ Edge一般可用,這可能是一個可行的選擇。
我測試了這個(我簽署了LAMBDA @ Edge的預覽。我還沒有正式收到回信說,我被授予訪問權限,但它似乎是工作。)
使用此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);
};
...給出了這樣的迴應......
$ 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:/
...所以,這似乎是一個可行的解決方法。
我配置了此功能以觸發「查看者響應」(觸發器觸發以允許在將響應從CloudFront返回給瀏覽器之前修改響應),但實際上它可能會觸發「原始響應」,而需要它的運行頻率較低(假設,與上例不同,您並未使用Cache-Control: no-cache
,就像我在測試中那樣),我僅使用/robots.txt
,因爲我恰好已將此設置與CloudFront和Lambda - 顯然這個文件不是X-Content-Type-Options
的特別有趣的應用程序,但正如你所看到的,這確實有效)。
我不知道Lambda @ Edge何時會從預覽版中發佈。
如果您希望將其作爲S3自身的功能請求提交,那麼可以聯繫您的AWS賬戶代表(如果有),或者在AWS支持論壇上發佈相關信息。 (我不隸屬於AWS)。
地獄......會聯繫亞馬遜詢問他們是否會有他們的計劃。謝謝 ! – MathKimRobin
謝謝,我希望他們會改變他們的計劃。目前......別無選擇:■再次感謝您! – MathKimRobin