Запрет на скачивание файлов с сервера

Обновлено: 06.07.2024

Файл .htaccess — это файл для локальной настройки веб-сервера, той программы, которая отдаёт нам сайт. Первый раз мы про него говорили, когда публиковали сайт в интернете, а потом — когда настраивали политику безопасности для сайта. Но это не всё, на что способен .htaccess.

Кратко: сайт, сервер и клиент

На всякий случай вводим в курс дела:

  • Когда вы заходите на сайт, вы на самом деле не заходите не на сайт.
  • На самом деле вы делаете запрос на удалённый компьютер.
  • На удалённом компьютере есть программа, она называется «сервер», то есть «раздатчик».
  • Сервер получает ваш запрос и обрабатывает его. Это похоже на работу официанта: вы пришли в ресторан, он принял ваш заказ и пошёл раздавать задания на кухню и в бар
  • Когда заказ готов (например, собрана ваша веб-страница), сервер отдаёт её вам по каналу связи. Вы получаете свою страницу. Вам кажется, что вы зашли на сайт, а на самом деле сайт изготовил вам персонально вашу страничку, а вы её получили.

Что такое .htaccess

.htaccess — это файл, в котором записаны инструкции для сервера. Это то же самое, что инструкция официанта, например, «рыбов не продаём». Только официант может эти инструкции запомнить, а серверу нужно записывать. Для этого и нужен файл.

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

Чтобы добавить любую настройку, скопируйте её код, вставьте его в любое место файла .htaccess и замените наши данные на свои. После этого не забудьте сохранить файл.

👉 В этой статье мы собрали самые простые и полезные настройки файла .htaccess. Если вам нужны все настройки, почитайте официальную документацию.

Что за странное название — .htaccess?

Это тема из Линукса и веб-сервера Apache. Если не в курсе, читайте нашу статью про Linux.

Если вы работаете на Windows, у вас может быть привычка, что у всех файлов должно быть расширение (например, .exe или .pdf). В Линуксе не так: там файлы могут быть вообще без расширения, а тип файла заложен в самом файле, а не в названии.

Поэтому для Линукса нет проблемы с названиями типа .htaccess — это просто очередной файл.

В других операционках могут быть проблемы. Например, на MacOS этот файл может не отображаться: операционка думает, что это скрытый системный файл, и тогда нужно сказать ей «показывай всё». А в Виндоусе вам могут не дать сохранить или переименовать файл с таким названием.

Если же вы будете редактировать или создавать этот файл на удалённом сервере, у вас не будет проблем.

Рецепт: сообщить, что сайт недоступен

Запрещаем спамить в комментариях

Ускоряем загрузку с помощью кеша

Если кто-то уже заходил на ваш сайт, то у него уже есть все ваши стили, картинки и скрипты. Чтобы не загружать одно и то же тем, кто уже был, можно настроить кеширование: браузер проверит, есть ли у него в хранилище эти данные, и если есть — возьмёт их оттуда, чтобы было быстрее.

Но есть и минус: иногда браузер может подтянуть из кеша старую картинку или скрипт, хотя вы вчера залили всё новое. Редко, но бывает.

Настраиваем кодировку

Во всех наших проектах мы прописываем кодировку прямо в HTML-файле. Но есть ещё один способ: указать нужную кодировку в настройках сервера. Тогда, если мы забудем указать её на странице, ничего страшного не произойдёт: сервер сам сообщит браузеру о нужной настройке.

Ещё одна защита от внешних скриптов

В статье про безопасность сайта мы говорили, как можно запретить выполнение разных скриптов на сайте. Кроме этого, есть ещё один способ:

Запрещаем приходить с определённых сайтов

Если вы не хотите, чтобы к вам приходили посетители с какого-то сайта, например, с сайта любителей аниме или клуба любителей пропатчить KDE под FreeBSD, то вы можете установить это в настройках .htaccess. Сервер проверит, с какого сайта приходит посетитель, и если этот сайт есть в вашем личном чёрном списке — доступ посетителю будет запрещён.

👉 Если человек придёт с другого сайта, но при этом будет всё равно иногда заходить на сайты, которые вам не нравятся, — трюк не сработает.

Оптимизируем сайт для SEO

С помощью файла .htaccess можно сделать поисковую оптимизацию сайта — настроить сайт так, чтобы его любили поисковики и приводили к вам из поиска побольше читателей. Но чтобы переходить к настройкам .htaccess, нужно сначала разобраться, что такое SEO и как оно работает. Это и сделаем в следующий раз.


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

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

Если же вам нужны базовые сведения о предназначении данного файла, то вы можете получить из нашей статьи введение в .htaccess (перевод данной статьи не делал, так как там основы, их достаточно в русскоязычном сегменте Сети, но если будет проявлен интерес, то можно и ее перевести для полноты картины — прим. переводчика), в которой достаточно подробно раскрыты все аспекты его применения.

Итак, полезные примеры использования. htaccess:

1. Управление доступом к файлам и каталогам

Защита паролем — это одно, но иногда может понадобиться полностью блокировать доступ пользователей к определенному файлу или папке. Обычно это относится к системным папкам, таким, например, как includes, доступ к которым должны иметь приложения, но не пользователи.

Чтобы сделать это, поместите данный код в файл. htaccess и сохраните его в каталоге к которому закрываете доступ:


Однако учитывайте, что доступ будет блокирован для всех пользователей, включая и вас. Открыть доступ для конкретного пользователя можно прописав его IP-адрес. Вот код, который для этого потребуется:


где xxx. xxx. xxx. xxx — это ваш IP. Для задания разрешенных диапазонов IP-адресов вы можете заменить три последние цифры. Например, написав вместо них «0/12», вы зададите диапазон IP-адресов одной сети, что избавит вас от необходимости вводить в список все разрешенные IP-адреса отдельно.

Если вы хотите заблокировать доступ к определенному файлу, включая сам. htaccess, используйте следующий фрагмент кода:


Если вы хотите указать определенные IP-адреса которым надо запретить доступ, перечислите их при помощи allow from.

Если же вы хотите заблокировать доступ к файлам определенного типа, используйте этот код:

2. Запрет на просмотр директорий

Для предотвращения просмотра директорий сайта добавьте в .htaccess следующий код:


Если же по какой-то причине вы хотите разрешить просмотр всех директорий, используйте код:

3. Ускорение времени загрузки за счет сжатия файлов

Сжимать можно файлы любого типа. Например, для сжатия HTML-файлов добавьте код:


Для сжатия текстовых файлов используйте:


Вы также можете сжать JavaScript или включить сжатие для других различных типов файлов командами:


Кроме того, вы можете сжать все ваши JavaScript, HTML и CSS файлы при помощи GZIP. Для этого используйте следующий код:

4. Защита сайта от вставки изображений с других ресурсов

Если вы хотите запретить добавление ссылок на изображения со сторонних ресурсов, добавьте в файл .htaccess код:

5. Блокировка посетителей, перешедших с определенного домена

Если вы не хотите видеть на своем сайте пользователей с конкретного домена, то вы можете запретить им доступ. Например, пользователей с нежелательных ресурсов (сайты для взрослых, хакерские сайты и т. д.) вы можете перенаправлять на страницу 403 Forbidden. Для этого необходимо включить mod_rewrite, хотя, как правило, он включен по умолчанию. Добавьте в .htaccess код:

6. Блокирование запросов от определенных браузеров

Если в ваших файлах журналов появились записи о посещении особых браузеров (это могут быть имитирующие работу браузера боты или пауки), вы можете запретить им доступ на свой сайт, добавив несколько строк в. htaccess:


Замените badbot1, badbot1 и т. д. именами ботов из вашего журнала. Это закроет посторонним программам доступ к вашему сайту.

7. Кэширование файлов

Кэширование файлов — еще один способ ускорить загрузку вашего сайта. Вот то, что вам нужно прописать в .htaccess:


Вы можете добавить больше типов файлов (или удалить некоторые из них) в перечисленныq в данном примере список файлов. Вы также можете указать время сохранения файлов в кэше (в секундах) при помощи переменной max-age.

8. Отключение кэширования для разных типов файлов

Если вы не хотите кэшировать определенные типы файлов, можно не включать их в список. Однако иногда файлы могут сохраняться в кэше даже не будучи явно перечисленными в списке, в этом случае вы можете отключить кэширование для них индивидуально. Чаще всего отключать кэширование требуется для динамических файлов, таких как сценарии. Пример требуемого для этого кода:

Просто укажите типы файлов, для которых нужно отключить кэширование.

9. Обход диалога загрузки

По умолчанию при попытке загрузить файл с веб-сервера отображается диалог, который спрашивает вас, хотите ли вы сохранить файл или открыть его. Этот диалог особенно раздражает при скачивании больших медиа- или PDF-файлов. Если файлы, которые вы загрузили на сервер, предназначены исключительно для скачивания, вы можете облегчить жизнь пользователей, установив загрузку действием по умолчанию. Добавьте в. htaccess следующее:

10. Переименование файла .htaccess

Если вы по каким-то причинам хотите переименовать файл .htaccess, то вы можете это сделать. Теоретически, переименование файла .htaccess не должно вызывать проблем с приложениями, запущенными на вашем сервере, но если вы заметите появление ошибок выполнения сценариев после переименования файла, то просто переименуйте его обратно.


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

11. Замена стартовой страницы сайта

Если вы хотите установить главную страницу, отличную от стандартной (index.html, index.php, index.htm и т. д.), добавьте следующий код в файл .htaccess:


Замените mypage.html на URL страницы, которую вы хотите использовать в качестве главной.

13. Ограничение максимального размера загружаемых файлов в PHP, максимального размера передаваемых данных, максимального времени выполнения скриптов и т.п.

.htaccess позволяет устанавливать некоторые значения, непосредственно влияющие на работу PHP приложений. Например, если вы хотите установить в PHP ограничение на размер загружаемых файлов, чтобы не забивать хостинг большими файлами:


Вы можете установить любое значение, в примере размер файла ограничен 15M (MБ). Помимо этого вы можете ограничить максимальный размер передаваемых при загрузке в PHP данных:


Вы можете заменить 10М на любое требуемое вам значение. Если вам не требуется постоянное выполнение скриптов, вы можете ограничить время их выполнения с помощью строки:


240 — время выполнения (в секундах), после которого скрипт будет остановлен, вы можете изменить это значение на любое другое. Наконец, если вы хотите ограничить время анализа скриптом исходных данных, используйте следующий код:


Установите вместо 180 любое требуемое вам время (в секундах).

14. Скрытие типов файлов

Иногда нужно, чтобы пользователи не знали, какие типы файлов находятся на вашем сайте. Один из способов скрыть эту информацию — сделать так, чтобы все ваши файлы отображались как HTML или PHP файлы:


И это лишь часть того, что может .htaccess, а вообще он позволяет сделать гораздо больше. Например, вы можете установить автоматический перевод страниц вашего сайта, установить часовой пояс сервера, удалить WWW из URL-адресов или использовать причудливые представления каталогов и т.д. Но в любом случае, прежде чем начинать эксперименты с файлом .htaccess, всегда сохраняйте резервную копию оригинального .htaccess, чтобы при возникновении проблем можно было быстро восстановить работу сайта.

UPD (спасибо akuma) расширение РНР для скрытия формата файлов приведено как пример и использование этого трюка в реальном проекте может оказаться небезопасным

Бывают такие случаи, когда владелец сайта не желает, или не может, отдавать свой сайт целиком своим посетителями. Приведем простой пример:

У вас есть сайт, на котором, вы публикуете обои для рабочего стола. Общий объем сайта - 500Mb, посещаемость 7 000 хостов в сутки, примерный трафик - 300Гб в месяц или 10 Гб в день.

Добавим к этим посетителям еще 20 человек, скачавших ваш сайт целиком. Получаем увеличение трафика на 10Гб или в два раза. Или другими словами 0.28% посетителей создали 50% трафика. Не совсем честно, особенно если вы оплачиваете трафик.

Способы защиты сайта от скачивания

1. Запрет по User Agent

User Agent - так называются данные, которые каждый броузер передает серверу. Эти данные могут содержать в себе такую информацию, как тип броузера, операционная система, список плагинов и многое другое.

Это наиболее простой, но наименее эффективный способ. Его преимущество в том, что ни кого лишнего вы не запретите, а недостаток в том, что практический каждый Download агент может маскироваться под стандартные браузеры.

2. Ограничение по количеству просмотренных страниц за определенный промежуток времени.

Тоже достаточно спорный метод. Но надо понимать, что нормальный человек не может просмотреть 60 страниц за 1 минуту. Но с другой стороны и Download агент может делать паузы между скачиванием страниц.

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

3. Запрет с помощью скрытой ссылки.

Наверное, один из самых правильных методов. Вы должны сделать скрытую ссылку на странице, по которой "живой" человек не перейдет, а Download агент и прочие роботы сделают это. IP адрес с которого производится просмотр скрытой страницы блокируется, скажем, на 3 минуты.

Главный недостаток - это то, что вы, таким образом, блокируете поисковых роботов. Бороться с этим можно двумя способами:

Выводы.

Как видите, метода, который бы работал на сто процентов, нет, и вам придется что-то (или кого-то) приносить в жертву. Ниже приведен код PHP класса, который реализует защиту от скачивания, описанную в третьем методе.

Пример PHP класса

var $timeout ; /* Время, на которое производится бан IP */
/* адреса. По умолчанию - 600 (10 минут) */

var $log ; /* Имя лог-файла. */

var $AGENTS ; /* Массив - список разрешенных агентов */

/* */
/* Конструктор - в параметрах можно указать основные настройки */
/* */
/* $filename - имя файла, в котором хранится список */
/* забаненных адресов. */
/* $timeout - время, в секундах, на которое банится IP. */
/* */
/* Пример: $f=new Flooders("ban.txt",3600); */
/* */

/* */
/* Задает имя лог-файла. Если имя файла пустое, то лог-файл */
/* не испольщуется */
/* */

/* */
/* Добавления IP адреса в бан-лист */
/* */

Так что Вам мешает сделать самим посредника для передачи файла? Создаем промежуточный скрипт, который как раз и будет выполнять проверку - можно ли отдавать файл или нет.

Рецепт:
0. Создаем скрипт PHP
1. Добавим немного API битрикса (без дизайна)
2. Нарезаем и бросаем ID файла через URL
3. Добавляем специи анти Inject (думайте сами, если передается только Integer, то как проверить? =) )
4. Пробуем, авторизацию и права на закачку
5. Если все готово, то отдаем файл, иначе шлем на форму авторизации
6. "Соль, перец по вкусу"

Что мешает? Мешает то что я не программист php и вообще понятия не имею о скриптах.
А решение нужно.

Так вопрос и не решился. Опять сейчас по гуглу пытался найти. Одни сплошные старые статьи и тп. Без решений. Одна вода только.

Я не понимаю почему трудно сделать стандартную опцию с галкой - запретить.

Цитата
Евгений Шекин пишет:
Я не понимаю почему трудно сделать стандартную опцию с галкой - запретить.

Обычно защита от скачивания делается так: дается ссылка на файл напрямую, а на некий скрипт. В ссылке есть параметры, указывающие на необходимый файл на сервере. Данный скрипт идентифицирует пользователя, и, если ему можно скачивать файл, скрипт его отдает. Таким образом никто не знает, где лежит реальный файл, т.к. прямой ссылки на него нету.

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

Есть и другие решения, но у них есть свои существенные недостатки. Т.е. проще спрятать ссылку на файл, чем проверять каждый файл на доступ к нему.

Поэтому нет такого простого готового решения. Все делается обычно под конкретный проект.

Ок. Этот вопрос задали уже 100 раз. Почему компания Битрикс просто не сделала готовое рабочее решение (встроенное)
Тот самый скрипт о котором вы говорите.

Неправда что нет решения и все делает под проект. Одна задача одно решение.
Во всех сторонних системах, я джумлу вот мучал - все решено.

Читайте также: