Как правило, изменения необходимо вносить в корневой файл .htaccces за исключением случаев, когда необходимо защитить отдельные каталоги(например, wp-content/uploads)
По умолчанию корневой .htaccess в WordPress имеет вид
1 2 3 4 5 6 7 8 9 10 |
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
Между строками, указанными ниже, никаких изменений не вносим
# BEGIN WordPress
# END WordPress
Например, все строки будем добавлять после строки
# END WordPress
1.Запрет доступа к определенным файлам — .htaccess, wp-confog.php и т.д.
1 |
# nano .htaccess |
1 2 3 4 5 |
# Deny access to wp-config.php, xmlrpc.php, readme.html, license.txt, htaccess|htpasswd files <FilesMatch "^.*(wp-config\.php|xmlrpc\.php|readme.html|license.txt|\.[hH][tT][aApP].*)$"> Order deny,allow Deny from all </FilesMatch> |
Отключение XML-RPC интерфейса выполняем в том случае, если нет необходимости в управлении WordPress, публикации стаетй и редактировании комментариев с помощью внешних программ
2. Запрет доступа к содержимому каталога wp-includes
1 |
# nano .htaccess |
1 2 3 4 5 6 7 8 9 10 |
# Block wp-includes folder and files <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> |
3. Запрет доступа к файлам в каталоге wp-content за исключением файлов с указанными расширениями
(мониторим логи ошибок сайта на предмет ошибок связанных с запретом доступа к файлам )
1 |
# nano wp-content/.htaccess |
1 2 3 4 5 6 |
# Disable access to all file types except the following Order deny,allow Deny from all <Files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar|ttf|woff|woff2|mp4|mp3)$"> Allow from all </Files> |
4. Запрет доступа к php-файлам в каталоге wp-content/uploads
(Не использовать, если тема сайта требует выполнения PHP-кода в каталоге uploads)
1 |
# nano wp-content/uploads/.htaccess |
1 2 3 4 |
# Kill PHP Execution <Files *.php> deny from all </Files> |
5. Отключение просмотра/листинга содержания каталогов
1 |
# nano .htaccess |
1 2 |
# Disable directory browsing Options All -Indexes |
6. Ограничение доступа к к админ-панели WordPress
Разрешить доступ только с указанных IP-адресов
1 |
# nano .htaccess |
1 2 3 4 5 6 7 8 9 |
# Limit logins and admin by IP <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR] RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$ RewriteCond %{REMOTE_ADDR} !^111.111.111.111$ RewriteCond %{REMOTE_ADDR} !^112.112.112.112$ RewriteRule ^(.*)$ - [R=403,L] </IfModule> |
7. Запрет доступа к сайту с определенных адресов
1 |
# nano .htaccess |
1 2 3 4 5 |
<Limit GET POST> order allow,deny deny from IP_ADDRESS_1, IP_ADDRESS_2 allow from all </Limit> |
8.Защита от Hotlink
1 |
# nano .htaccess |
1 2 3 4 5 6 |
# Prevent image hotlinking script. Replace last URL with any image link you want. RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC] RewriteRule \.(jpg|jpeg|png|gif)$ http://www.yourwebsite.com/hotlink.png [NC,R,L] |
9.Отключение вывода ошибок
1 |
# nano .htaccess |
1 |
php_flag display_errors Off |
Для оптимизации производительности включаем кеширование браузером, а также поддержку сжатия
Включение кеша браузера
1 |
# nano .htaccess |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Setup browser caching <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 text/html "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 1 month" </IfModule> |
Включение сжатия
1 |
# nano .htaccess |
1 2 3 4 5 6 7 8 9 10 11 12 |
# Setup compression <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript </IfModule> |
Включение страницы обслуживания
1 |
# nano .htaccess |
1 2 3 4 5 |
# Redirect all traffic to maintenance.html file RewriteEngine on RewriteCond %{REQUEST_URI} !/maintenance.html$ RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123 RewriteRule $ /maintenance.html [R=302,L] |
Включение пользовательских страниц ошибок
1 |
# nano .htaccess |
1 2 3 4 |
# Custom error page for error 403, 404 and 500 ErrorDocument 404 /error.html ErrorDocument 403 / error.html ErrorDocument 500 / error.html |
Источник:
https://codex.wordpress.org/Hardening_WordPress
https://www.cloudways.com/blog/10-wordpress-security-issues-how-to-fix-them/
https://www.mageewp.com/use-htaccess-to-improve-wordpress-security.html
http://www.wpexplorer.com/htaccess-wordpress-security/
https://premium.wpmudev.org/blog/htaccess/