首页 > 解决方案 > 使用 Lambda@Edge 和 Amazon CloudFront 为所有路由(错误路由)添加 HTTP 安全标头

问题描述

我正在使用这个文档https://aws.amazon.com/blogs/networking-and-content-delivery/adding-http-security-headers-using-lambdaedge-and-amazon-cloudfront/

我在 S3 存储桶中使用了一个带有云端 CDN 的反应应用程序。我添加了一个 lambdaedge 来添加一个安全标头

 headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; 
 headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}];

它适用于主页(mySite.com): 在此处输入图像描述

但它不适用于不同的路线,例如 mySite.com/login 在此处输入图像描述

当我检查 cloudFront 中的错误行为时,没有添加标头的选项

在此处输入图像描述

为什么这个页面/login有错误?由于反应路由器在 aws s3 存储桶中不起作用

标签: amazon-s3amazon-cloudfrontaws-lambda-edge

解决方案


我解决这个问题的方法是实现一个源请求 Lambda@Edge 函数,该函数event.Records[0].cf.request.uri根据 S3 源中已知文件和路径的白名单验证值。如果路径与白名单不匹配,它会更新/index.html允许 React 应用程序处理请求的 uri 值。

通过此更改,将不再有任何 404 请求,这意味着响应将成功通过添加响应标头的原始响应 Lambda@Edge 函数。


推荐阅读