Как предотвратить горячую ссылку на Amazon S3 без использования подписанных URL?

18

Есть ли способ предотвратить хотлинкинг на Amazon S3 без использования подписанных URL-адресов?

    
задан MathOldTimer 04.06.2009 в 08:12
источник

7 ответов

11

Установив правильную политику веток S3, вы можете добавить реферальную политику, чтобы предотвратить горячую ссылку.

Ссылка

    
ответ дан Robert Mao 20.09.2011 в 23:12
источник
  • Пожалуйста, разместите здесь ответ, а не ссылку на ответ. –  Ollie Glass 21.02.2013 в 15:02
17

Вам нужна политика в виде ведра, которая позволяет реферерам из вашего домена (ов) и отказывает источники, не принадлежащие вашим доменам. Я обнаружил, что изображения могут быть hotlinked, если вы не включаете явное отрицание - многие руководства и примеры просто дают политику allow и не упоминают часть deny.

Вот моя политика, просто измените 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/*"
          ]
        }
      }
    }
  ]
}
    
ответ дан Ollie Glass 10.02.2013 в 13:54
источник
  • Спасибо за это. Это действительно помогло мне и хорошо поработало. Мое единственное предложение состоит в том, что, возможно, вы также просто добавили запись для «YOUR-WEBSITE.com *» в ответ, чтобы охватить все базы, так как там были мои икоты. Приветствия за прекрасный сценарий. –  Paolo Broccardo 17.09.2013 в 19:20
  • Это отлично работает, но как мне разрешить пустые рефереры? При обращении к изображениям через CSS реферер пуст и изображения не отображаются. –  prophoto 03.11.2016 в 21:17
  • Отлично! Вы спасли меня –  Ricardo 18.01.2017 в 19:33
3

Я использую Apache RewriteMap для переназначения относительных ссылок для выбора расширений файлов - * .jpg, * .gif, * swf, * .fla в Cloudfront. В основном делает URL ваших изображений представленными как относительные ссылки на ваш сайт. Это не препятствует полностью открытию URL-адреса S3 / cloudfront, просто добавляет уровень сложности для вора.

Возможно, стоит попробовать, примените ограничения hotlink через htaccess с указанным выше методом. Я сам не пробовал.

    
ответ дан maddie 08.08.2009 в 09:39
источник
  • А? Разве это не означает, что каждый запрос изображения должен идти на ваш сервер, прежде чем он сможет перейти на сервер CloudFront? Если это так, разве это не побеждает точку использования CDN? (Это не было бы для действительно больших файлов, таких как видео, но для изображений?) –  Doug McClean 12.09.2009 в 07:20
  • Запрос попадет на ваш веб-сервер, и браузеру сообщается, куда он должен пойти, чтобы извлечь файл, но история браузера никогда не обновляется с фактическим URL-адресом для CDN. Это, по сути, тот же трюк за «маршрутами» в большинстве инфраструктур front-end-контроллера, но в этом случае запрос никогда не пересылается серверу приложений, а только Apache. –  Claude 07.11.2009 в 23:17
  • @Claude, если вместо браузера используются диспетчеры загрузки или что-то вроде curl / wget, не будет ли перенаправление прозрачным и, таким образом, станет способом включения hotlinking? –  icarus74 04.11.2011 в 14:57
  • @ icarus74 Извините за поздний ответ. Конечно, любой инструмент, способный просматривать и понимать коды HTTP, должен иметь возможность следить за перенаправлением на CDN, фактически отрицая эффект правила, предложенного maddie. Лучший способ действий - защитить ваш CDN от нежелательных запросов, установив политики ведра, как было предложено выше ссылкой Роберта Мао. –  Claude 27.12.2011 в 23:22
1

Здесь есть хороший учебник здесь . Обязательно ознакомьтесь с комментариями, поскольку в коде сайта есть символ пробела, который заставляет решение не работать.

    
ответ дан edrevo 20.06.2011 в 02:10
источник
1

Это в официальные документы

Измените 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/*"]}
    }
  }
]
}
    
ответ дан Fahmi 16.09.2016 в 04:55
источник
0

Hotlinking - одна из причин, по которым Amazon создал Cloudfront. Cloudfront намного быстрее. Я написал записку, на которой вы можете посмотреть здесь.

Ссылка

edit: S3 и Cloudfront используют один и тот же тип политики ведра, чтобы убедиться, что запрос исходит из правильного URL-адреса. Однако Cloudfront все еще быстрее.

    
ответ дан jeremyjjbrown 29.12.2011 в 17:50
источник
  • Cloudfront не предотвращает хотлинкинг или уважает политику S3 –  Ollie Glass 10.02.2013 в 13:37
-1

Не совсем. Через это можно запустить экземпляр EC2 и прокси.     

ответ дан Joe Beda 04.06.2009 в 08:17
источник
  • uhhhhh. нет. что побеждает цель CDN. –  FlavorScape 25.03.2014 в 17:58