Безопасный логин в WordPress с использованием nginx

Лишние плагины не нужны

, начиная с версии 2.6, имеет улучшенную поддержку работы с .

У администратора есть две возможности:

  1. Использование для работы в панели управления (wp-admin).
  2. Использование только для входа в систему.

Первое достигается путём добавления строки

[-]
View Code PHP
define('FORCE_SSL_ADMIN', true);

в wp-config.php, второе — путём добавления строки

[-]
View Code PHP
define('FORCE_SSL_LOGIN', true);

Добавляем одну из этих двух строк в wp-config.php и проблема решена? Но в действительности всё не так, как на самом деле :-)

У специалистов по информационной безопасности существует негласное правило, по которому HTML-форма, передающая данные на -страницу, должна также находиться на -странице. Связано это с тем, что соединение, по которому передаются данные, может прослушиваться. В случае обычного HTTP-соединения злоумышленник может модифицировать передаваемую от сервера форму, заменив на http, что приведёт к тому, что форма будет отправлена по обычному (не зашифрованному) соединению, и злоумышленник сможет перехватить всю ценную информацию. Усугубляется это всё тем, что пользователь не может сказать, куда передаётся форма, не открыв исходный код страницы.

Для предотвращения подобного безобразия сама форма должны находиться на -страницы: злоумышленник не сможет изменить данные, передаваемые по зашифрованному каналу.

Казалось бы, при чём тут Лужков ? Во-первых, даже при включённом FORCE__LOGIN не перенаправляет пользователя с http://.../wp-login.php на ://.../wp-login.php. А во-вторых,  — это не только платформа для блоггинга, это еще и CMS, на основе которой делаются всякие магазины и даже целые панели управления сайтами (да, я принимал участие в создании одной из таких панелей). Иными словами, платформы, где успешный перехват логина и пароля может привести к очень печальным последствиям.

Какие есть варианты? Самый простой — написать простой плагин, который сделает перенаправление с HTTP на для wp-login.php. Но лишний PHP-код скорости работы не прибавляет, а потому не наш метод. Тем более, когда всё можно сделать на уровне сервера.

Рассмотрим на примере .

В есть две возможности настроить -сервер. Первая (она же наиболее часто используемая) — это задание отдельного виртуального хоста для HTTP- и -версий сайта. Что-то вида

[-]
View Code nginx configuration
server {
    listen 80;
    server_name example.com;
#...
}

server {
    listen 443;
    server_name example.com;

    ssl on;
#...
}

В этом случае всё просто: нужно добавить следующие строки в виртуальный хост, отвечающий за :

[-]
View Code nginx configuration
location = /wp-login.php {
    rewrite .* https://example.com/wp-login.php break;
}

Вторая возможность — задать HTTP- и -версию сайта в одном виртуальном хосте:

[-]
View Code nginx configuration
server {
    listen 80;
    listen 443 ssl;
    server_name example.com;

# Ни в коем случае нельзя задавать директиву ssl on
#...
}

В этом случае добавляемый код будет сложнее:

[-]
View Code nginx configuration
location = /wp-login.php {
    if ($ssl_protocol = "") {
        rewrite .* https://example.com/wp-login.php break;
    }

    fastcgi_pass ...;
    fastcgi_param SCRIPT_FILENAME /path/to/blog/wp-login.php;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_NAME /wp-login.php;
}

Очевидно, что в директивах fastcgi_xxx нужно указать свои пути.

После этого будет автоматически перенаправлять посетителя с http://.../wp-login.php на ://.../wp-login.php. Таким образом и форма, и адрес отправления формы будут находиться на защищённых страницах.

Добавить в закладки

Связанные записи

Автор: Vladimir; опубликовано в: WordPress, Безопасность; метки: HTTPS, nginx, SSL, WordPress, безопасность
5
Дек
2009

RSS Комментарии к статье «Безопасный логин в WordPress с использованием nginx»  »

К статье «Безопасный логин в WordPress с использованием nginx» комментариев пока нет. Не хотите ли стать первым?

Оставить комментарий к записи «Безопасный логин в WordPress с использованием nginx»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Изображения должны быть включены!

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя