Защита wordpress

Это шпаргалка по защите wordpress от взлома.

После инсталляции заменить salt keys

Для этого сходить по ссылке https://api.wordpress.org/secret-key/1.1/salt/ и вставить ключи в wp-config.php

Установить правильные права на каталоги

Завести пользователя wpadmin, дать ему группу под которой запущен apache (apache для CentOs или www-data для Ubuntu), установить владельцем файлов этого пользователя. На каталоги и файлы даем разрешение на запись только владельцу, группе и остальным только чтение (за исключением папки uploads).

adduser -g wpadmin
usermod -g www-data wpadmin

Скрипт для установки прав на каталоги SetPermissionsOnHtml.sh:

#! /bin/bash
USER='pmadmin'
GROUP='apache'
WWW_DIR='/var/www'

cd $WWW_DIR || exit

echo "Set owner to files.."
find . -type f -exec chown $USER:$GROUP {} \;

echo "Set permissions to files.."
find . -type f -exec chmod 644 {} \;
find . -type f | grep -i upload | xargs chmod 666

echo "Set permissions to folders.."
find . -type d -exec chmod 755 {} \;

echo "Set owner to folders.."
find . -type d -exec chown $USER:$GROUP {} \;

find . -type d | grep -i upload | xargs chmod 775
find . -type d | grep -i cache | xargs chmod 775

echo "Set owner and permission to .htaccess files"
find $WWW_DIR -type f -name .htaccess  -exec chown pmadmin:root  {} \;
find $WWW_DIR -type f -name .htaccess  -exec chmod 644  {} \;


echo "Done!"

Отключить использование .htaccess, использовать конфиг апача вместо .htaccess

Отключить использование .htaccess добавив опцию AllowOverride None в VirtualHost (в раздел Directory /var/www/html):

Добавить в VirtualHost следующие опции:

    <Files .htaccess>
        Order allow,deny
        Deny from all
    </Files>
    <Files wp-config.php>
        order allow,deny
        deny from all
    </Files>

    <Directory /var/www/html/wp-content/uploads>
    php_flag engine off
    Options -ExecCGI
    <FilesMatch \.php$>
    RemoveHandler .php
    RemoveType php
    SetHandler application/x-httpd-php-source
    </FilesMatch>
    </Directory>

    <Directory /var/www/html>
        AllowOverride None
        Options All -Indexes

        # Block the include-only files.
        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]

        # secure XSS injections
        RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
        RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
        RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
        RewriteRule ^(.*)$ index.php [F,L]
    </Directory>

Закрыть доступ к wp-admin

Добавить в VirtualHost:

<Directory /var/www/html/blog/wp-admin>
    Order deny,allow
    Allow from 192.168.1.0/24
    Deny from All
</Directory>

Отключить функционал pingback (xmlrpc.php)

Создать файл wp-content/mu-plugins/xmlrpc_off.php:

<?php
/*
Plugin Name: pingback_off
Version: 0.1
Description: xmlrpc setting
Plugin URI:
Author: Trend
Author URI: http://trendwebsites.ru
*/


add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );

function remove_xmlrpc_pingback_ping( $methods ) {

   unset( $methods['pingback.ping'] );

   return $methods;

} ;

add_filter( 'xmlrpc_methods', 'Remove_Unneeded_XMLRPC' );

function Remove_Unneeded_XMLRPC( $methods ) {

    unset( $methods['wp.getUsersBlogs'] );

    return $methods;

} ;

add_filter( 'wp_headers', 'yourprefix_remove_x_pingback' );

function yourprefix_remove_x_pingback( $headers )
{
    unset( $headers['X-Pingback'] );
        return $headers;
}


?>

Вообще закрыть xmlrpc.php

При помощи xmlrpc.php удалено создаются посты в блоге. Как правило этот функционал не используется пользователем, зато прекрасно используется хакерами для взлома.

# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
    order deny,allow
    deny from all
    allow from 123.123.123.123
</Files>

Добавить комментарий