Лучшие снипперы .htaccess для повышения безопасности WordPress

(adsbygoogle = window.adsbygoogle || []).push({});
Безопасность WordPress является одним из самых подрываемых факторов среди начинающих блоггеров. При неконтролируемой установке WordPress существует немало потенциальных уязвимостей, которые остаются без присмотра. Большинство учебников по установке WordPress объясняют быстрый и простой способ развернуть WordPress за считанные минуты. Но они пропускают несколько важных факторов безопасности. Например, просмотр каталогов и использование имени пользователя «admin» считаются серьезными лазейками безопасности. Сегодня мы рассмотрим фрагменты кода .htaccess, которые помогут улучшить безопасность вашего блога WordPress. Прежде чем мы начнем, давайте быстро рассмотрим, что такое файл htaccess.

Что такое файл .htaccess?
Файл htaccess является необязательным файлом конфигурации для веб-сервера Apache для интерпретации для каждого каталога. Вы можете хранить различные настройки в этом файле, такие как: защита паролем каталога, блокирование IP-адресов, блокирование файла или папки из общего доступа и т.д. Традиционно файл .htaccess присутствует в базовом каталоге установки WordPress. Он сохраняет структуру постоянной ссылки по умолчанию.

СОВЕТ. Прежде чем начать, обязательно создайте резервную копию текущего файла .htaccess (если он есть).

1. Блокировка плохих ботов


Одним из лучших применений файла .htaccess является его способность отклонять несколько одновременных подключений IP-адресов доступа к вашему сайту. Это полезно при блокировке известных спамеров и других подозрительных источников.
# Блокировка одного или несколько IP-адресов.
# Замените IP_ADDRESS_* на IP-адрес, который вы хотите заблокировать

<Limit GET POST>
order allow,deny
deny from IP_ADDRESS_1
deny from IP_ADDRESS_2
allow from all
</Limit>

Где IP_ADDRESS_1 — это первый IP-адрес, который вы хотите запретить для доступа к вашему сайту. Вы можете добавить столько IP-адресов, сколько хотите. Независимо от того, какие пользовательские агенты (браузеры) используют эти IP-адреса, они не смогут получить доступ к одному файлу с вашего сервера. Веб-сервер автоматически откажет в доступе.

2. Отключить Просмотр Каталогов

Это один из самых подрываемых недостатков безопасности на сайте WordPress. По умолчанию веб-сервер Apache позволяет просматривать каталоги. Это означает, что все файлы и папки внутри корневого каталога (иногда называемого домашним каталогом) веб-сервера просматриваются и доступны посетителю. Если вы не хотите, чтобы люди просматривали ваши медиа-загрузки ваши темы или файлы плагинов.

Если случайно выбирать 10 личных или бизнес-сайтов под управлением WordPress, у 6-8 из них не будет отключен просмотр каталогов. Это позволяет любому легко «обнюхать» папку wp-content/uploads или любой другой каталог, у которого нет файла index.php по умолчанию.
# Отключить просмотр каталогов
Options All -Indexes

3. Разрешить только выбранные файлы из wp-content.

Как вы знаете, папка wp-content содержит большинство ваших тем, плагинов и всех загрузок мультимедиа. Вы, конечно, не хотите, чтобы люди обращались к нему без ограничений. В дополнение к отключению просмотра каталогов вы также можете запретить доступ ко всем типам файлов, за исключением нескольких. По сути, вы можете выборочно разблокировать файлы, такие как JPG, PDF, DOCX, CSS, JS и т. Д., А также отказаться от остальных. Для этого вставьте этот фрагмент кода в файл .htaccess:
# Отключить доступ ко всем типам файлов, за исключением следующих
Order deny,allow
Deny from all
<Files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar)$">
Allow from all
</Files>
Вы должны создать новый файл .htaccess с кодом и вставить его в папку wp-content. Не размещайте это в базовом каталоге установки, иначе он не будет работать. Вы также можете добавить любой тип файла в список, добавив '|' после «rar». В приведенном выше списке содержатся необходимые файлы — XML, CSS и JavaScript, общие форматы изображений и документов и наиболее используемые форматы архивов.

4. Ограничить доступ wp-includes для всех

Папка wp-includes содержит только файлы, которые строго необходимы для запуска основной версии WordPress — без плагинов или тем. Помните, что тема по умолчанию находится в каталоге wp-content/theme. Таким образом, ни один посетитель не сможет получить доступа к содержимому папки wp-include.
# Блокировать wp-includes включая папку и файлы
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

5. Разрешить доступ только выбранным IP-адресам к wp-admin

Папка wp-admin содержит файлы, необходимые для запуска панели инструментов WordPress. Хорошей мерой безопасности является включение только нескольких выбранных IP-адресов для доступа к папке wp-admin. Вы можете разрешить IP-адреса людей, которым необходим доступ к панели инструментов WordPress — редакторам, модераторам и другим администраторам. Этот фрагмент кода позволяет только фиксированным IP-адресам получить доступ к папке wp-admin и запретить доступ всему остальному миру.
# Ограничить вход и администрирование по IP
<Limit GET POST PUT>
order deny,allow
deny from all
allow from 302.143.54.102
allow from IP_ADDRESS_2
</Limit>
Убедитесь, что вы создаете новый файл .htaccess и вставляете его в папку wp-admin, а не в папку базовой установки.

6. Защитите wp-config.php и .htaccess от всех

Файл wp-config.php содержит наиболее важные учетные данные доступа вашего сайта WordPress. Он содержит имя базы данных и учетные данные доступа и различные другие важные данные, среди других параметров. Если вы не хотите, чтобы другие люди смотрели этот файл и отключить публичный доступ к источнику всей этой безопасности — самому файлу .htaccess. Вы можете отключить доступ к wp-config.php с помощью следующего кода:
# Запретить доступ к файлу wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>
Чтобы запретить доступ ко всем файлам htaccess (помните, что некоторые из них могут находиться в папке wp-admin и других папках), используйте этот фрагмент кода:
# Запретить доступ ко всем файлам .htaccess
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>

7. Запретить ссылку на изображение

Один из самых классных и нужных htaccess хаков, это запрет на использование ссылок на ваши изображения. Если кто-то использует изображения вашего сайта, ваша пропускная способность потребляется, и ваш сайт может загружаться медленнее. Этот фрагмент кода устраняет эту проблему и запретит использование изображений при обнаружении hotlink.
# Запретить использование изображения. Замените последний URL любой желаемой ссылкой на изображение.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourotherwebsite.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://i.imgur.com/MlQAH71.jpg [NC,R,L]

8. Включить кеширование браузера.

Также известный как кеширование на стороне клиента, этот .htaccess взломать, чтобы включить рекомендуемые варианты кеширования браузера для вашего сайта WordPress. Вы также можете использовать его в других проектах — HTML-сайтах и ​​т.д.
# Настройка кэширования браузера
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
</IfModule>

9. Перенаправление на страницу техническое обслуживание

Когда вы переносите веб-сайт или выполняете какую-либо задачу обслуживания, всегда рекомендуется создать статический файл «вниз для обслуживания», чтобы информировать своих посетителей о том, что веб-сайт подвергается обновлению или техобслуживанию. Просто создайте файл maintenance.html (или любое другое имя файла) и загрузите его в базовый каталог установки WordPress. Вставьте следующий фрагмент файла .htaccess. По завершении операции обязательно удалите или закомментируйте эти строки, чтобы вернуться к общей работе. Вы можете прокомментировать, добавив '#' в начале каждой строки.
# Перенаправить весь трафик на файл maintenance.html
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteRule $ /maintenance.html [R=302,L] 

10. Пользовательские страницы ошибок

Вы также можете использовать файл .htaccess для настройки и направления на пользовательские страницы ошибок, такие как 403, 404 и 500. После того как вы подготовили Вашу страницу ошибки – скажем error.html, загрузите его в директорию установки WordPress. Затем добавьте следующий фрагмент кода в ваш .htaccess файл, чтобы включить пользовательскую страницу ошибки:
# Страница пользовательской ошибки для error 403, 404 and 500
ErrorDocument 404 /error.html
ErrorDocument 403 /error.html
ErrorDocument 500 /error.html

Вывод:
Сегодня мы изучили некоторые из самых крутых htaccess хаков, чтобы укрепить ваш сайт WordPress. Я предлагаю вам попробовать каждый модуль один за другим, используя резервную копию файла .htaccess до и после тестирования каждого модуля. Это связано с тем, что файл .htaccess очень важен. Отсутствующий символ «#» или неуместный «» может уничтожить целостность вашего сайта. Если вы регулярно посещаете панель инструментов WordPress, рекомендуется не включать выборочные IP-адреса в вашу папку wp-admin.

Больше примеров вы найдете тут =>

Вывод ошибок PHP на экран

(adsbygoogle = window.adsbygoogle || []).push({});
Часто возникают проблемы с сайтом, а ошибок нет, примером белый екран и в логах чисто, что бы увидеть ошибку и решить ее делаем следующее.
Способ 1. Включение вывода ошибок на экран через php.ini
Если вы имеете доступ (ну а вдруг) к серверу, то в конфигурационном файле php.ini найдите параметр error_reporting и установите его значение в E_ALL.
error_reporting = E_ALL

Способ 2. Включение вывода ошибок на экран через .htaccess
В корне сайта имеется файл .htaccess, который регулирует процессы загрузки страниц. Чтобы включить вывод сообщений, откройте его и добавьте следующие две строки:
php_flag display_errors on
php_flag display_startup_errors on


Вот еще парочка примеров которая вам пригодится
Убираем отображение ошибок php на сайте
# supress php errors
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

Вывод ошибок php в произвольный лог файл
# enable PHP error logging
php_flag  log_errors on
php_value error_log  /home/path/public_html/domain/PHP_errors.log

Защищаем папку с логами от доступа
# prevent access to PHP error log
<Files PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>


Выставляем уровень вывода ошибок

integer — флаг, который задает глубину вывода ошибок. 0 — не выводить ничего, 8191- выводить в лог все. Значение 1 — выводит ошибки. Более подробное описение в документации по PHP.

# general directive for setting php error level
php_value error_reporting integer


Выставляем максимальный размер для строки с ошибкой
# general directive for setting max error size
log_errors_max_len integer


Отключить логирование повторяющихся ошибок
# disable repeated error logging
php_flag ignore_repeated_errors on
php_flag ignore_repeated_source on


Настройки для сайта в рабочем режиме
# PHP error handling for production servers
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_reporting -1
php_value log_errors_max_len 0

<Files /home/path/public_html/domain/PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>


Конфигурация для отладки или разработки
# PHP error handling for development servers
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log /home/path/public_html/domain/PHP_errors.log
# [see footnote 3] # php_value error_reporting 999999999
php_value error_reporting -1
php_value log_errors_max_len 0

<Files /home/path/public_html/domain/PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>
Читать дальше