Защита сайта и многое другое при помощи .htaccess

Итак, что же такое .htaccess?

Авторы ВЕБ-сервера Apache реализовали возможность децентрализованного управления конфигурацией с помощью использования специальных файлов имеющих именуемых по умолчанию - .htaccess, которые помещаются на диске прямо в веб-пространстве виртуального сервера. Эти файлы обычно называются .htaccess (обратите внимание на первый символ в названии файла - точку). Часто этот файл лежит в корневой папке сайта как htaccess.txt, в частности так в CMS Joomla.

Поскольку файлы .htaccess являются служебными, то они не доступны веб-пользователю из браузера. Хотя конечно же, абсолютно всё, в том числе и это ограничение, можно переназначить в httpd.conf - главном конфигурационном файле сервера доступному только администратору хостинга.

Файл apache .htaccess перечитывается при каждом обращении к веб-серверу, так что изменения, внесенные в этот файл, вступают в силу немедленно.

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

Поэтому сохраните оригинальный файл .htaccess на всякий пожарный:))

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

Как сделать .htaccess
Просто. На локальном компе создаем текстовый документ .htaccess.txt, по FTP заливаем его на хост, и переименовываем в .htaccess

Основные возможности htaccess.

В начале рассмотрим директиву Order файла .htaccess Apache сервера
Описание: Устатавливает порядок работы директив Deny и Allow
Order - в переводе порядок. Порядок может принимать значения [Deny , Allow] или [Allow , Deny].
Синтаксис - состояние по умолчанию:

Order Deny,Allow

Директива Deny - в переводе запрет
Описание: Запрещает доступ определенных клиентов к ресурсам.
Синтаксис:

Deny from all|host

host может принимать значения IP адреса или имени хоста.

Директива Allow - в переводе разрешить
Описание: Разрешает доступ определенных клиентов к ресурсам.
Синтаксис:

Allow from all|host

host может принимать значения IP адреса или имени хоста.

.htaccess запрет на доступ для всех

Order Deny,Allow
Deny from all

.htaccess - разрешение на доступ для определенного IP адреса и хоста.

Order Deny,Allow
# запрет для всех на доступ к ресурсу

Deny from all
# разрешаем только следующим
Allow from local.
Allow from 100.99.99.1, 100.99.99.2

.htaccess - запрет на доступ для пределенного IP адреса и хоста.

Order Allow,Deny
#разрешаем заходить на сервер всем

Allow from all
Deny from local.
Deny from 100.99.99.1, 100.99.99.2

Если нужно запретить всей сети 100.99.99.1 - 100.99.99.255 то ставим комбинацию первых лем: 100.99.99

Запрет на доступ для определенного файла.

Директива Files файла .htaccess сервера Apache
В примере запрещается доступ к файлу с паролями .htpasswd для всех посетителей кроме 100.99.99.1 и 2

<Files ".htpasswd">

Order Deny,Allow
Deny from all
Allow from 100.99.99.1, 100.99.99.2

</Files>

Запрет передачи данных браузера методом GET.

В данном примере мы запретим пользователям с айпи-адресами (IP) 100.99.99.1, 100.99.99.2 заходить на ресурс используя метод GET для передачи данных браузером - .htaccess ip:

<Limit GET>

Order Allow,Deny
Deny from 100.99.99.1, 100.99.99.2
Allow from All

</Limit>

Мы запретили пользователю с IP адресом 100.99.99.1 смотреть сайт. Если вместо 100.99.99.1 написать 100.99.99, то доступ будет запрещен для всей сети класса C.

Запрет на доступ к определенной группе файлов.

Еще один пример .htaccess: запрет на доступ для определенной группы файлов. В примере запрещается доступ к файлам с расширениями "lib" и "pm" для всех посетителей кроме 100.99.99.1

<FilesMatch "\.(lib|pm)$">

# или например : <FilesMatch "\.(gif|jpe?g|png)$">

Order Deny,Allow
Deny from all
Deny from 100.99.99.1

</FilesMatch>

Как с помощью .htpasswd и .htaccess запретить доступ к папке сайта.

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

Содержание:

AuthType Basic
AuthName "Please input login and password!"
AuthUserFile  /usr/host/mysite/.htpasswd
require valid-user

  • AuthType — может иметь значение Basic или Digest, в нашем случае нам подойдет Basic.
  • AuthName — текст выводимый вместе с формой авторизации.
  • AuthUserFile — путь к файлу с паролями (.htpasswd).
  • AuthGroupFile — путь к файлу групп, если он существует.
  • Require — определяет параметры аутентификации. (User,Group,Valid-user) Valid-user – все прошедшие проверку. User – пользователи имеющие права доступа. Group – группы пользователей имеющие права доступа.

Создайте файл .htpasswd и в него поместите следующую строку:

admin:$apr1$ejtOHg/4$cMColJLMZ39weAalo3V8k0

Строка эта содержит пару логин и пароль где:

Логин: admin
Пароль: 1

Чтобы генерировать любые пароли для файла .htpasswd можно воспользоваться утилитой для генерации паролей htpasswd.exe Скачать утилиту для генерации паролей htpasswd.exe

Пользоваться утилитой для генерации паролей очень легко, нужно создать файл .htpasswd и в программе выбрать его с помощью кнопки “Old file“. Далее все интуитивно понятно, вводим новых пользователей и пароли к ним, затем жмем на “Update“. Кстати данная утилита генерации паролей для htpasswd, может не только создавать новые, но и редактировать старые пароли. Что очень удобно, в случае если вы забыли старый пароль. Еще стоит сказать что эта утилита является стандартной и поставляется вместе с сервером Apache.

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

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

Перенаправление посетителей при обновлении сайта.

order deny,allow

        deny from all

        allow from 123.123.123.123

      ErrorDocument 403 /page.html

      <Files page.html>

        allow from all

        </Files>

Замените 123.123.123.123 на Ваш ip-адрес, а также замените page.html на ту страницу, которую будут видеть пользователи, зашедшие на сайт

Определенная страница с ошибкой 404

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

ErrorDocument 404 /404.html

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

Редирект на перемещенные или переименованные страницы.

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

Redirect 301 /old.html http://yoursite.com/new.html

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

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

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

Чтобы избежать таких вещей, следует прописать такой код:

Options All -Indexes

На некоторых хостингах такая функция прописана по-умолчанию, в таком случае Вам не стоит беспокоиться.

Создание красивых URL

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

Вот некоторые примеры с кодом:

RewriteEngine on

          RewriteRule ^about/$    /pages/about.html [L]

          RewriteRule ^features/$ /features.php [L]

          RewriteRule ^buy/$      /buy.html [L]

          RewriteRule ^contact/$  /pages/contact.htm [L]

Переопределение сообщений об ошибках

Одной из полезных возможностей, предоставляемых Apache, является подмена стандартных сообщений об ошибках веб-сервера своими. Для этого служит директива ErrorDocument.

ErrorDocument 403 "<BODY><H1>Forbidden</H1>
ErrorDocument 404 /errors/404.html

Внимание: при указании непосредственно HTML кода в данной директиве кавычки ставятся только в начале строки (см. пример)!
Пути к файлам указываются относительно корневого каталога данного веб-хоста, а не относительно файловой системы (правильно: /errors/404.html; неправильно: /var/www/myhost/html/errors/404.html).

Включение поддержки SSI

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

AddType text/html .shtml .htm .html
AddHandler server-parsed .shtml
Options +Includes

Блокировка по реферреру

Посредством использования модуля mod_rewrite и файла .htaccess можно добиться запрета доступа к Вашим ресурсам, если клиент пришел с какого-то определенного сайта (блокировка по referer'у).

Для этого требуются следующие директивы .htaccess:

RewriteEngine on
# Options +FollowSymlinks # – раскомментировать, если при установке этого .htaccess появляется ошибка 500, Internal Server Error
RewriteCond %{HTTP_REFERER} badsite.com [NC]
RewriteRule .* – [F]

Или, если нужно перечислить больше одного сайта,

RewriteEngine on
# Options +FollowSymlinks # – раскомментировать, если при установке этого .htaccess появляется ошибка 500, Internal Server Error
RewriteCond %{HTTP_REFERER} badsite.com [NC,OR]
RewriteCond %{HTTP_REFERER} anotherbadsite.com
RewriteRule .* – [F]

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

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www.)?mydomain.ru(/)?
RewriteCond %{HTTP_REFERER} !^http://(.*).mydomain.ru(/)?
RewriteRule .*.(gif|jpg|jpeg|png)$ – [F]
Изменение индекс-страницы

Задать/Изменить индексный файл и последовательность их обработки можно директивой DirectoryIndex
Например:

DirectoryIndex photo.php photo.php5 index.php

Перенаправления

Для организации редиректа средствами .htaccess достаточно строки вида:
Redirect /old_directory/old_file.html http://your_new_site.com/new_directory/new_file.html

если нужно редиректить все содержимое подкаталога:
Redirect /old_directory http://your_new_site.com/new_directory/

редирект для всего сайта:
RewriteEngine On
RewriteRule (.*) http://your_new_site.ru

Запрет обращений к .htaccess

Защитить их можно следующим образом, однако, это по умолчанию уже есть в httpd(2).conf, то есть в самой конфигурациии веб-сервера.

<Files ~ "^\.ht">
Order allow,deny
Deny from all

</Files>

Добавление MIME-типов

Для добавления MIME-типов используется директива
AddType mime/type extension
Например,
AddType application/x-bittorrent torrent

Используется она в тех случаях, когда конфигурация по умолчанию заставляет сервер передавать документы не так, как требуется; например, многие серверы по умолчанию подразумевают тип text/plain, и бинарный файл (например, rar-архив), скачанный с такого сервера, вполне может оказаться «битым».

Запрет прямых ссылок на ресурсы

Если Вы хотите избежать так называемого «хотлинкинга» – прямых ссылок на Ваши ресурсы с других сайтов – Вам опять-таки поможет .htaccess в комбинации с mod_rewrite.
Для начала рассмотрим, чем плох хотлинкинг. Например, некий сайт размещает у себя изображение, находящееся на Вашем сайте, просто указав его в тэге <img src>. При этом все обращения к такой странице вызовут скачивание данного изображения с Вашего сайта; таким образом, будет расходоваться Ваш траффик и пропускная способность канала сервера, а посетители чужого веб-сайта увидят изображение, хранящееся у Вас, без соответствующего контекста.

Как же бороться с подобной практикой?
Рассмотрим следующий пример части файла .htaccess:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(js|css)$ - [F]

Данный код запрещает обращения к .js и .css файлам (скрипты javascript и описания Cascading Style Sheets), если они производятся не с Вашего сайта.

Другой пример:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(png|gif|jpg|jpeg)$ http://www.mydomain.com/youaretheworst.gif [R,L]

При обращении извне к изображениям, хранящимся на вашем сайте, вместо самих изображений будет отображаться содержимое файла youaretheworst.gif.

Запрет вывода списка файлов

Apache (при включении соответствующих опций) умеет отображать список файлов в каталоге, если в нем нет ни одного из перечисленных в DirectoryIndex файлов. Часто эта опция включена по умолчанию, что может быть неприемлемо.
Строчка
Options -Indexes
отключит этот режим.

Однако иногда может, наоборот, понадобиться разрешить просматривать список файлов, при этом исключив из него их часть. Для этого служит IndexIgnore.
Например,
IndexIgnore *.php* *.pl *.html *.shtml
разрешает вывод списка всех файлов, кроме PHP и Perl скриптов, а также HTML документов.

и еще...

Меняем страницу, которая будет показываться при обращении к директории.

Пропишем в файле .htaccess:


Код
DirectoryIndex index.shtml


** При обращение к директории, в которой лежит .htaccess, будет грузиться файл index.shtml

Запрет доступа с помощью .htaccess

При желании можем дать запрет на все файлы:


Код
deny from all


*** никто ничего не увидит.


Разрешить доступ посетителю только с определенного ip:


Код
Order Allow,Deny
deny from all
allow from 192.168.8.1


*** Всем кроме посетителя с IP 192.168.8.1 доступ запрещен.

Кстати, вместо ip адреса в .htaccess можно использовать имя домена. Например. Запретим доступ для всех посетителей, кроме пришедших с www.talkonline.ru :

Код
Order Deny,Allow
Deny from all
Allow from .talkonline.ru



Запрет доступа для определенного ip:


Код
Order Allow,Deny
Allow from all
deny from 192.168.8.1


*** Для посетителя с IP 192.168.8.1 доступ на сайт запрещен.
**** Только не спрашивайте у меня где всять список китайских ip

Аналогично, как и в примере выше, можно вместо (а можно и совместно) IP использовать имя домена, т.е. запретить доступ для посетителей, пришедших с определенного сайта:


Код
Order Allow,Deny
Allow from all
deny from .thehun.net
deny from 192.168.8.1


*** Для посетителя с IP 192.168.8.1 и всех, кто пришел с thehun.net доступ на сайт запрещен.


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


Код
CharsetSourceEnc windows-iso-8859-1


*** все файлы будут иметь кодировку windows-iso-8859-1

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


Код
AddType "application/x-httpd-php3; charset=windows-iso-8859-1" .html
AddType "application/x-httpd-php3; charset=windows-1251" .htm


*** Устанавливаем кодировку windows-iso-8859-1 на файлы .html и windows-1251 на файлы .htm


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


Код
AddDefaultCharset windows-iso-8859-1


*** Все страницы, которые отдает сервер клиенту, будут иметь кодировку windows-iso-8859-1


Перенаправляем посетителей на другой URL (редирект)
В .htaccess пишем:


Код
Redirect / http://talkonline.ru


*** все посетители будут перенаправлены на www.talkonline.ru

Перенаправление посетителей при запросе определенных страниц:
Защищаемся от всяческих сетевых вирусов и сканеров.
Добавляем в .htaccess:


Код
redirect /scripts http://www.microsoft.com
redirect /_vti_bin http://www.microsoft.com
redirect /MSADC http://www.microsoft.com
redirect /_mem_bin http://www.microsoft.com
redirect /msadc http://www.microsoft.com
RedirectMatch (.*)\cmd.exe$ http://www.microsoft.com$1


*** Любой запрос с адресом /_vti_bin или /scripts будет автоматически перенаправляться на сайт Microsoft


Редирект посетителей в зависимости от реффера (ссылающейся страницы):


Код
RewriteCond %{HTTP_REFERER} http://www.yandex.ru
RewriteRule ^/yandex.html$ /google.html [L]


*** В данном случае все с yandex.ru вместо файла yandex.html получат файлик google.html

Как сделать 301 редирект для joomla:

1. На сервере находим файл .htaccess, обычно он лежит в корневом каталоге.

2. Делаем резервную копию .htaccess  !!!

3. Находим следующие строки:


########## Begin - Joomla! core SEF Section
#
Информация
#
######### End - Joomla! core SEF Section


4. Между ними будет информация, а в последней строке в квадратных скобках будет атрибут "L", удаляем его.

5. Если Вы хотите чтобы название вашего сайта в адресной строке писалось с www, после "информации"добавляем следующее


RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^site.com [NC]
RewriteRule ^(.*) http://www.site.com/$1 [L,R=permanent]


Если Вы хотите чтобы название вашего сайта в адресной строке писалось без www, после "информации"добавляем это


RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.site.com [NC]
RewriteRule ^(.*) http://site.com/$1 [L,R=permanent]


6. Проверяем, также проверьте открываются ли внутренние страницы, если всё гуд то см. пункт 7, если нет, то загружаем резервную копию файла .htaccess и возвращаемся к пункту 2.

7. Пишем комментарий, а если поставите на своём сайте ссылочку на эту статью, моё сердце наполнится радостью и милость Богов Яндекса и Гугла снизойдёт на Ваш ресурс

 

По материалам сайта http://www.htaccess.net.ru, http://www.maxua.com.ua/, www.rabotafree.com

Контакты

+38 098 822-7881 (Viber, WatsApp, Telegram)
+38 067 132-55-65
Skype - alexsima.com
 alexsima@i.ua
 alexsimadesign@gmail.com
предложить заказ

© 2006-2019 AlexsimA. Все права принадлежат их авторам:)