gpt4 book ai didi

amazon-web-services - 使用 S3 和 CloudFront 防止图像盗链

转载 作者:行者123 更新时间:2023-12-03 19:08:28 31 4
gpt4 key购买 nike

我有一个有很多页面的网站,每个页面都有很多图片(几十甚至几百张)。
我试图避免图像盗链,但又不会过多地增加 AWS 成本。
到目前为止,我发现了 3 个选项:
选项 1:使用 WAF 来防止盗链,通过创建基于引用 header 阻止的规则。
https://aws.amazon.com/pt/blogs/security/how-to-prevent-hotlinking-by-using-aws-waf-amazon-cloudfront-and-referer-checking/
这个解决方案的问题是,如果你每个页面加载了很多图片,成本会增加太多,因为除了支付S3和CloudFront之外,你还需要支付WAF,为图片请求(例如,假设每页有 100 张图片)。
选项 2:配置 CloudFront 以触发 Lambda@Edge 查看器请求触发器,该触发器将检查每个进入前门的请求,并根据引用 header 阻止请求。
https://stackoverflow.com/a/46044606/2444386
这类似于上面的选项。问题是你给 添加了开销每请求,即使图像已经在 CloudFront 缓存中。 Lambda@Edge 将始终被调用,如果您网站的每个页面上都有很多图像,也会增加太多成本。
选项 3:配置 S3 存储桶策略以根据引用 header 阻止请求,并将引用 header 在 CloudFront 列入白名单。
到目前为止,这在我看来是成本效益最好的选项,因为如果图像已经在 CloudFront 缓存中,您就没有任何开销,而且成本是最便宜的,因为您不需要支付 WAF 或Lambda@Edge。
问题是缓存命中率会小得多,因为除非传入请求的 Referer header 与 匹配,否则 CloudFront 不会提供来自缓存的响应。正好一个来自已经缓存的请求。
我尝试使用“来源”请求 header 来避免此问题,但浏览器似乎不会为图像 GET 请求发送此 header 。
有更好的选择吗?

最佳答案

您可以通过使用 CloudFront 支持的 native 选项来避免上述情况,Signed Cookies .
通过添加 Lambda@Edge function如果用户登陆非基于 Assets 的页面(即主页),您可以生成一个签名的 cookie。通过在 CloudFront 中强制执行此操作,只有浏览您网站的人才能访问 Assets 。
或者,您可以生成 CloudFront signed URL ,但这需要为每个 Assets 完成。
要使用这些为您想要保护的 Assets 创建辅助来源/行为并添加行为规则 Restrict Viewer Access (Use Signed URLs or Signed Cookies) . Lambda@Edge 将位于另一个原点。

关于amazon-web-services - 使用 S3 和 CloudFront 防止图像盗链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62959832/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com