Как повысить безопасность блога

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


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

1
Disallow: /wp-*

После этого все папки, начинающиеся с wp-, станут недоступны никому, кроме вас.

Так же нужно удалить версию WordPress из кода страницы - я уже писал об этом ранее. Напомню, что это делается вставкой одной строчки кода в файл functions.php:

1
remove_action('wp_head', 'wp_generator');

Неплохо бы защитить блог от всевозможных ботов-сканеров, бороздящих сайт ваш сайт в поисках всевозможных личных данных, ссылок и адресов. Для этого мы сейчас напишем самый настоящий плагин.
Создайте текстовый файл blockbadqueries.php и скопируйте в него такой код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
/*
Plugin Name: Block Bad Queries
Plugin URI: http://perishablepress.com/press/2009/12/22/protect-wordpress-against-malicious-url-requests/
Description: Protect WordPress Against Malicious URL Requests
Author URI: http://perishablepress.com/
Author: Perishable Press
Version: 1.0
*/


global $user_ID;

if($user_ID) {
  if(!current_user_can('level_10')) {
    if (strlen($_SERVER['REQUEST_URI']) > 255 ||
      strpos($_SERVER['REQUEST_URI'], "eval(") ||
      strpos($_SERVER['REQUEST_URI'], "CONCAT") ||
      strpos($_SERVER['REQUEST_URI'], "UNION+SELECT") ||
      strpos($_SERVER['REQUEST_URI'], "base64")) {
        @header("HTTP/1.1 414 Request-URI Too Long");
    @header("Status: 414 Request-URI Too Long");
    @header("Connection: Close");
    @exit;
    }
  }
}
?>

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

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

1
2
3
4
5
6
Options +FollowSymLinks
RewriteEngine On
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]

Ну и самое главное, святая святых - это файл wp-config.php. В нем и пароль от вашей базы данных, и секретные ключи. Его нужно спрятать от всех подальше, то есть напрочь закрыть к нему любой доступ извне. Делается это через фал htaccess добавлением в него таких строчек:

1
2
3
4
<files wp-config.php>
order allow,deny
deny from all
</files>

Береженого бог бережет!

Солнце бывает опаснее всякого вируса. Не уберегись вы от солнца, и сгорите моментально. Не накройте вы цветы, и к вечеру останутся лишь пожухлые веточки. И это уже не говоря о продуктах. Если вы не хотите зависеть от солнца, то купите маркизы и навесы, которые производит компания "Манеж" (Украина) - простые, удобные, надежные и элегантные солнцезащитные системы.

Комментариев 12
  1. Отличная статья!

  2. По поводу скрытия версии блога. Я по rss-фиду wordpress-блога могу сказать какая используется версия:

    1
    <generator>http://wordpress.org/?v=x.x</generator>

    Так, что нет смысла прятать функцией. За статью спасибо!

  3. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # 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
    AddDefaultCharset utf-8
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} ^$                                                              [OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).*                            [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*(HTTrack|clshttp|archiver|loader|email|nikto|miner|python).* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|libwww\-perl|curl|wget|harvest|scan|grab|extract).* [NC]
    RewriteRule ^(.*)$ - [F,L]
    RewriteEngine On
    RewriteCond %{QUERY_STRING} [^?]*\? [OR]
    RewriteCond %{QUERY_STRING} (\.\./|\.\.\\) [OR]
    RewriteCond %{QUERY_STRING} (///) [OR]
    RewriteCond %{THE_REQUEST} "^(GET|POST) /?https?:"
    RewriteRule (.*) $1 [F]
    Disallow: /wp-*
    Options +FollowSymLinks
    RewriteEngine On
    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]
    <files wp-config.php>
    order allow,deny
    deny from all
    </files>

    Что-то я нахимичил в файле htaccess теперь ни на сайт ни в админку не заходит выдает ошибку – 500 Internal Server Error. Хотя хостинг работает в норме.
    Подскажите как быть?:)

  4. Приветствую тебя,Начальник Сайта! Видимо эта страница не для таких крутых чайников как я! Давеча вставил в htaccess рекомендованную тобой пропись супротив спам-ботов(одолевали через комменты, штук по 10 в сутки)- СПАСИБО!- ни единого спам-коммента за неделю! Но вот, рекомендованная тобой пропись туда-же Disallow: /wp-* – в первую очередь сработала против меня (и,думаю – против всех моих благообразных посетителей)- блог напрочь перестал быть доступным – ошибка – 500 Internal Server Error. То же самое при вставке туда всех здесь рекомендованных прописей. А как создать текстовый файл blockbadqueries.php – думаю, не только я один этого не знаю. Так что, уважаемый Начальник, тебе бы очень неплохо немного "приопустить" (сделать более понятной) эту страничку…

  5. Вот похвалился, что не стало спам-комментов от роботов, оказывается заблокировались и людские комменты..(движок Вордпресс 2.9.2)

  6. 1 Disallow: /wp-* yfписала эту строчку, сайт перестал открываться выдает ошибку почему так?

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

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

  8. господа, я конечно не профи, но по-моему формат
    Disallow: /wp-*

    это для файла robots.txt
    вставьте эту строчку туда, и все будет работать корректно.

    п.с. большое спасибо создателю этого сайта, нашел много полезной инфы