我想将x-frame-options作为sameorigin添加到AWS CloudFront服务中,该服务在S3桶上为我的应用程序提供服务。
我不希望添加新的Lambda函数来编辑请求头。
实际上,我找到了一个类似附件的地方:
表示我的应用程序的CloudFront分发集、CloudFront分发设置、->源和原产地组、-> S3内容项、添加源自定义标头、->标头名称:->值:sameorigin
但是,当部署完成时,在S3桶文件和URL的所有相关请求中仍然会有旧的头文件。
我如何在没有任何Lambda函数的情况下直接使用现有的AWS CloudFront面板来添加标头呢?
发布于 2022-01-18 23:02:59
截至2021年11月,Cloudfront现在支持响应头策略。这允许您将策略与您的发行版相关联,后者定义了要返回的其他响应头。如果不想使用完整的安全头屏蔽策略,可以使用x-frame-options
创建自定义策略。
发布于 2020-04-08 19:20:21
您正在配置的“源自定义标头”不是从原点添加到响应中的头,而是添加到源请求中的头。来自CloudFront文档
您可以将CloudFront配置为将自定义标头添加到它发送到原点的请求。这些自定义标头使您能够从原始源发送和收集信息,而这些信息在典型的查看器请求中没有得到。甚至可以为每个源自定义这些标头。CloudFront支持自定义和亚马逊S3起源的自定义标头。
因此,这不是添加响应头的选项。虽然使用S3元数据有可能影响返回给查看器的标头,但这只适用于Content-Type
-header,因此这不是一个选项。
最好的选择是使用Lambda@Edge函数。虽然这听起来是一种繁琐而昂贵的解决方案,但实际上并非如此。对于您的用例,Lambda@Edge函数的代码可能非常简单,如下所示:
def lambda_handler(event, context):
response = event["Records"][0]["cf"]["response"]
response["headers"]["x-frame-options"] = ":sameorigin"
return response
当您将此Lambda@Edge函数配置为在CloudFront中的“原产地响应”事件上触发时,它不会对每个查看器请求执行,而是只在返回给查看器的内容没有被CloudFront缓存并且必须首先从S3获取时执行。这有助于最小化Lambda@Edge函数的执行带来的额外延迟和成本。
发布于 2021-07-29 17:51:19
这就是答案帮助我解决了这个问题,但我首先找到了这个问题,所以我也在这里分享了答案。
现在,您可以通过CloudFront函数设置头部,而不必创建Lambda@Edge函数。文档中提供的示例代码非常适合设置过时的浏览器安全性所需的标头:
function handler(event) {
var response = event.response;
var headers = response.headers;
// Set HTTP security headers
// Since JavaScript doesn't allow for hyphens in variable names, we use the dict["key"] notation
headers['strict-transport-security'] = { value: 'max-age=63072000; includeSubdomains; preload'};
headers['content-security-policy'] = { value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"};
headers['x-content-type-options'] = { value: 'nosniff'};
headers['x-frame-options'] = {value: 'DENY'};
headers['x-xss-protection'] = {value: '1; mode=block'};
// Return the response to viewers
return response;
}
https://stackoverflow.com/questions/61105557
复制相似问题