Частный дистрибутив Amazon Cloudfront - ссылки на изображения внутри CSS
Я создал приватное распределение в Cloudfront, чтобы предотвратить hotlinking. Мне удалось создать ссылки на мои объекты с подписанным URL, который теперь работает нормально.
Мои единственные проблемы, заключается в том, что ссылки изображений внутри моих стилей CSS не работают, потому что они не подписаны. Поэтому, если у меня есть, например:
background-image: url('../img/bg.png');
Фоновое изображение не будет отображаться, поскольку таблица стилей не включает подписанный URL-адрес, и поэтому Cloudfront отказывается обслуживать контент.
Есть ли что-нибудь, что я могу сделать, чтобы это предотвратить?
Ответы
Ответ 1
Позвольте мне отступить и задаться фундаментальным вопросом: неужели вы действительно беспокоитесь о том, что люди обращаются к вашим изображениям? В самом деле? И если кто-то это сделает, каково реальное воздействие, которое это окажет на вас? Действительно?
Если у вас есть законная причина для предотвращения людей от горячей ссылки, то я не уверен, что любой CDN-сервис (в данном случае CloudFront) - правильное решение для вас.
Эй, я просто честен...
Ответ 2
Есть несколько способов, каждый из которых имеет недостатки.
Вместо статического файла CSS вы генерируете его из шаблона (или другого умного способа сопоставления ресурсов в местах CloudFront). Вы можете использовать некоторую степень кэширования здесь, используя заголовки Last-Modified и max-age Cache. Самое сложное решение, но, возможно, лучшая защита.
Настройте путь перенаправления для всех ваших ресурсов CSS, в основном небольшой script, который переписывает путь к CF (позаботьтесь только о перезаписи ресурсов CSS и ничего больше). Это позволяет сохранить текущий статический CSS, но открывает потенциальную горячую ссылку вашего перенаправления script.
Что-то между собой может быть cron script, который генерирует статические файлы CSS со ссылками, срок действия которых истекает в 1.5d), чтобы уменьшить нагрузку на сервер.
Ответ 3
Как правило, очень плохая идея использовать частные дистрибутивы для ваших файлов css, поскольку добавление (предположительно постоянно меняющегося) времени истечения срока действия и подписи к URL-адресам css не позволяет браузерам кэшировать их, что значительно снижает полезность использования Cloudfront в первом место.
И даже если вы используете длительные сроки истечения срока действия, тогда кто-то, кто отчаянно хочет использовать ссылки для ссылок на css, просто установит script, чтобы очистить ваш файл css и извлечь из него URL-адреса изображений.
Ответ 4
вы можете повернуть все имя хоста CDN каждый день или два, тогда вам не нужно что-либо менять в css (предполагая, что css находится на CDN, который похож на пример)
http://www.explainthatstuff.com/blocking-cloudfront-hotlinks.html
Затем ваш CSS не нуждается в подписанных URL-адресах, и вы все равно можете блокировать hotlinking так же эффективно.
Ответ 5
Я недавно слышал о кодировке base64 в html/css. Есть плюсы и минусы, но это может быть то, что вы ищете:
Встраивает ли данные фонового изображения в CSS в качестве хорошей или плохой практики Base64?
Ответ 6
как насчет использования тега <base>
в yr html?
Хотя он не пытался, но мог бы помочь.
Другой вариант - использовать php для создания вашей таблицы стилей. например, вы получаете подписанные URL-адреса для всех изображений, затем вы нажимаете их как переменные в элементы стиля.