URL-адрес запрещен 403 при использовании инструмента, но разрешен в браузере

У меня есть несколько изображений, которые мне нужно сделать HttpRequestMethod.HEAD, чтобы узнать некоторые детали изображения.

Когда я перехожу к URL-адресу изображения в браузере, он загружается без проблем.

Когда я пытаюсь получить информацию о заголовке с помощью моего кода или онлайн-инструментов, это не удается.

Пример URL-адреса: http://www.adorama.com/images/large/CHHB74P.JPG

Как уже упоминалось, я использовал онлайн-инструмент Hurl.It, чтобы попытаться выполнить запрос Head, но получаю тот же 403 Forbidden сообщение, которое я получаю в своем коде. Я пробовал добавлять множество различных заголовков в запрос Head (User-Agent, Accept, Accept-Encoding, Accept-Language, Cache-Control, Connection, Host, Pragma, Upgrade-Insecure-Requests), но ничего из этого не работает.

Он также не может выполнить обычный запрос GET через Hurl.it. Та же ошибка 403.

Если это актуально, мой код представляет собой веб-службу C # и работает в облаке AWS (на тот случай, если серверы adorama имеют что-то против AWS, о чем я не знаю). Чтобы проверить это, я также развернул ec2 (linux box) и запустил curl, который также вернул ошибку 403. Локальный запуск curl на моем персональном компьютере возвращает двоичное изображение, которое предположительно является просто данными изображения.

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

Есть идеи, что мне нужно, чтобы загрузить заголовки изображений и не получить 403?


person Brad Baskin    schedule 23.03.2016    source источник


Ответы (4)


такая же проблема здесь.

Локально работает плавно. Выполняя это из экземпляра AWS, я получаю ту же проблему.

Я думал, что это проблема разрешения DNS (перенаправление на неисправный узел). Поэтому я попытался указать тот же IP-адрес, который был разрешен моим клиентом, но не решил проблему.

Я предполагаю, что Akamai (в данном случае услуга предоставляется CDN Akamai) блокирует AWS. Это как-то понятно, клиенты платят трафиком за CDN, злоупотребляя им, люди могут генерировать огромные счета.

Подключение к www.adorama.com (www.adorama.com) | 104.86.164.205 |: 80 ... подключено.

HTTP request sent, awaiting response... 
HTTP/1.1 403 Forbidden
Server: **AkamaiGHost**
Mime-Version: 1.0
Content-Type: text/html
Content-Length: 301
Cache-Control: max-age=604800
Date: Wed, 23 Mar 2016 09:34:20 GMT
Connection: close
2016-03-23 09:34:20 ERROR 403: Forbidden.
person Maurizio Benedetti    schedule 23.03.2016
comment
Да, спасибо за подтверждение на вашем AWS. Я тоже подозревал, что их CDN блокирует запросы AWS. AWS также публикует свои диапазоны IP-адресов, поэтому Akamai будет очень легко заблокировать эти запросы docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html - person Brad Baskin; 24.03.2016
comment
Я не нашел никаких доказательств того, что они именно этим и занимаются ... я надеюсь, что это просто продвинутая дактилоскопия, которую мы можем подделать по запросу. - person Brad Baskin; 24.03.2016

Я попробовал этот URL-адрес на Amazon, и у меня это не сработало. Однако wget работал с другими серверами, которых не было на Amazon EC2. Вот вывод wget на EC2

wget -S http://www.adorama.com/images/large/CHHB74P.JPG
--2016-03-23 08:42:33--  http://www.adorama.com/images/large/CHHB74P.JPG
Resolving www.adorama.com... 23.40.219.79
Connecting to www.adorama.com|23.40.219.79|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.0 403 Forbidden
  Server: AkamaiGHost
  Mime-Version: 1.0
  Content-Type: text/html
  Content-Length: 299
  Cache-Control: max-age=604800
  Date: Wed, 23 Mar 2016 08:42:33 GMT
  Connection: close
2016-03-23 08:42:33 ERROR 403: Forbidden.

Но с другого хоста Linux это сработало. Вот вывод

wget -S http://www.adorama.com/images/large/CHHB74P.JPG
--2016-03-23 08:43:11--  http://www.adorama.com/images/large/CHHB74P.JPG
Resolving www.adorama.com... 23.45.139.71
Connecting to www.adorama.com|23.45.139.71|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.0 200 OK
  Content-Type: image/jpeg
  Last-Modified: Wed, 23 Mar 2016 08:41:57 GMT
  Server: Microsoft-IIS/8.5
  X-AspNet-Version: 2.0.50727
  X-Powered-By: ASP.NET
  ServerID: C01
  Content-Length: 15131
  Cache-Control: private, max-age=604800
  Date: Wed, 23 Mar 2016 08:43:11 GMT
  Connection: keep-alive
  Set-Cookie: 1YDT=CT; expires=Wed, 20-Apr-2016 08:43:11 GMT; path=/; domain=.adorama.com
  P3P: CP="NON DSP ADM DEV PSD OUR IND STP PHY PRE NAV UNI"
Length: 15131 (15K) [image/jpeg]
Saving to: \u201cCHHB74P.JPG\u201d

100%[=====================================>] 15,131      --.-K/s   in 0s      

2016-03-23 08:43:11 (460 MB/s) - \u201cCHHB74P.JPG\u201d saved [15131/15131]

Я предполагаю, что поставщик изображений намеренно блокирует запросы из диапазонов адресов EC2.

Причина, по которой исходящий IP-адрес wget отличается в этих двух примерах, связана с разрешением DNS на провайдере cdn, который предоставляет adorama.

person Vorsprung    schedule 23.03.2016

Веб-сервер может реализовывать способы проверки определенных атрибутов отпечатков пальцев для предотвращения автоматических ботов. Вот некоторые из них, которые они могут проверить

  • Geoip, ИП
  • Заголовки браузера
  • Пользовательские агенты
  • информация о плагине
  • Браузерные шрифты возвращаются

Вы можете смоделировать заголовок браузера и изучить некоторые «атрибуты» отпечатков пальцев здесь: https://panopticlick.eff.org

Вы можете попробовать воспроизвести поведение браузера и ввести похожие заголовки / пользовательский агент. Обычный curl / wget вряд ли удовлетворяет этому условию, даже такие инструменты, как phantomjs, иногда блокируются. Есть причина, по которой некоторые предпочитают такие инструменты, как selenium webdriver, которые запускают настоящий браузер.

person mootmoot    schedule 23.03.2016

Я обнаружил, что использование другого URL-адреса, также защищенного AkamaiGHost, блокировалось из-за определенных частей в пользовательском агенте. В частности, использование ссылки с протоколом было заблокировано:

Используя curl -H 'User-Agent: some-user-agent' https://some.website, я нашел следующие результаты для разных пользовательских агентов:

  • Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0 хорошо
  • facebookexternalhit/1.1 (+http\://www.facebook.com/externalhit_uatext.php): 403
  • https ://bar: хорошо
  • https://bar: 403

Все, что я смог найти на данный момент, это этот (отклоненный) ответ https://stackoverflow.com/a/48137940/230422, в котором говорится что двоеточия (:) не допускаются в значениях заголовков. Очевидно, что это не единственное, что здесь происходит, поскольку в примере Mozilla также есть двоеточие, но не ссылка.

Я предполагаю, что, по крайней мере, большинство веб-серверов не заботятся и позволяют ботам facebook и другим ботам иметь контактный URL-адрес в их пользовательском агенте. Но, похоже, AkamaiGHost блокирует его.

person Lode    schedule 29.11.2019