【问题标题】:How do I prevent hotlinking on Amazon S3 without using signed URLs?如何在不使用签名 URL 的情况下防止 Amazon S3 上的热链接?
【发布时间】:2009-06-04 06:12:35
【问题描述】:

有什么方法可以在不使用签名 URL 的情况下防止 Amazon S3 上的热链接?

【问题讨论】:

    标签: amazon-s3 hotlinking


    【解决方案1】:

    您需要一个存储桶策略,既允许来自您的域的引荐来源,又拒绝不来自您的域的引荐来源。我发现如果您不包含明确的拒绝,图像可能会被热链接 - 许多指南和示例仅提供允许策略而没有提及拒绝部分。

    这是我的政策,只需将 BUCKET-NAME 和 YOUR-WEBSITE 更改为您自己的详细信息:

    {
      "Version": "2008-10-17",
      "Id": "",
      "Statement": [
        {
          "Sid": "Allow in my domains",
          "Effect": "Allow",
          "Principal": {
            "AWS": "*"
          },
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::BUCKET-NAME/*",
          "Condition": {
            "StringLike": {
              "aws:Referer": [
                "http://www.YOUR-WEBSITE.com/*"
              ]
            }
          }
        },
        {
          "Sid": "Deny access if referer is not my sites",
          "Effect": "Deny",
          "Principal": {
            "AWS": "*"
          },
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::BUCKET-NAME/*",
          "Condition": {
            "StringNotLike": {
              "aws:Referer": [
                "http://www.YOUR-WEBSITE.com/*"
              ]
            }
          }
        }
      ]
    }
    

    【讨论】:

    • 谢谢。这真的帮助了我并且运作良好。我唯一的建议是,也许您也只需在答案中添加一个“YOUR-WEBSITE.com*”条目,以涵盖所有基础,因为那是我打嗝的地方。为完美的剧本干杯。
    • 这很好用,但我如何允许空的推荐人?当通过 CSS 链接到图片时,referrer 为空且图片未显示。
    • 完美!你救了我
    【解决方案2】:

    通过设置正确的 S3 存储桶策略,您可以添加引用策略以防止盗链。

    http://s3browser.com/working-with-amazon-s3-bucket-policies.php

    【讨论】:

    • 请在此处发布答案,而不是链接到答案。
    【解决方案3】:

    我使用 Apache RewriteMap 重新映射相关链接以选择文件扩展名 - *.jpg、*.gif、*swf、*.fla 到 Cloudfront。基本上使您的图像的网址显示为您网站的相对链接。它并不能完全阻止 S3/cloudfront url 的发现,只是为可能的小偷增加了一层难度。

    可能值得一试,使用上述方法通过 htaccess 应用热链接限制。我自己没试过。

    【讨论】:

    • 嗯?这是否意味着每个图像请求都必须先发送到您的服务器,然后才能发送到 CloudFront 服务器?如果是这样,这难道不会破坏使用 CDN 的意义吗? (它不会用于像视频这样非常大的文件,而是用于图像?)
    • 请求将访问您的 Web 服务器,并告知浏览器应该去哪里获取文件,但浏览器的历史记录永远不会更新为 CDN 的实际 URL。这与大多数前端控制器框架中“路由”背后的技巧基本相同,但在这种情况下,请求永远不会转发到应用程序服务器,只有 Apache。
    • @Claude,如果不使用浏览器,而是使用下载管理器,或者使用 curl / wget 之类的东西,重定向不会是透明的,从而成为启用盗链的一种方式吗?跨度>
    • @icarus74 抱歉回复晚了。当然,任何能够浏览和理解 HTTP 代码的工具都应该能够跟随重定向到 CDN,从而有效地否定了 maddie 建议的规则的影响。最好的做法是按照上面 Robert Mao 的链接的建议设置存储桶策略,以保护您的 CDN 免受不需要的请求。
    【解决方案4】:

    在他们的official docs中

    将examplebucket 更改为您的存储桶名称,将example.com 更改为您的域。

    "Version":"2012-10-17",
    "Id":"http referer policy example",
    "Statement":[
      {
        "Sid":"Allow get requests originating from www.example.com and example.com.",
        "Effect":"Allow",
        "Principal":"*",
        "Action":"s3:GetObject",
        "Resource":"arn:aws:s3:::examplebucket/*",
        "Condition":{
          "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
        }
      }
    ]
    }
    

    【讨论】:

      【解决方案5】:

      有一个很好的教程here。请务必检查 cmets,因为网站代码中有一个空格字符会导致解决方案不起作用。

      【讨论】:

        【解决方案6】:

        Hotlinking 是 Amazon 创建 Cloudfront 的原因之一。 Cloudfront 要快得多。我写了一篇文章,你可以看看这里。

        http://blog.sat.iit.edu/2011/12/amazon-aws-s3-vs-cloudwatch-performance-grudgematch/

        编辑:S3 和 Cloudfront 都使用相同类型的存储桶策略来确保请求来自正确的 url。不过,Cloudfront 仍然更快。

        【讨论】:

        • Cloudfront 不会阻止盗链或遵守 S3 政策
        【解决方案7】:

        不是真的。您可以通过它运行 EC2 实例和代理。

        【讨论】:

        • 呃呃呃呃。不。这违背了 CDN 的目的。
        猜你喜欢
        • 1970-01-01
        • 2012-07-16
        • 2014-05-13
        • 2018-11-03
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        相关资源
        最近更新 更多