WordPress

Создание своего сайта оказалось весьма не простым занятием, и времени на его подготовку ушло совсем не мало... Было проделано не мало работы и теперь все шаги по порядку.

Первым делом был поднят LAMP на Ubuntu:

https://onedayadmin.sytes.net/lamp/

Теперь у нас настроен свой web сервер и пора приступить к установке Content Management System, в качестве которой я выбрал WordPress.

Установка WordPress.


Скачайте и распакуйте дистрибутив WordPress, если вы этого еще не сделали.

https://ru.wordpress.org/

cd /home/temp

wget https://ru.wordpress.org/wordpress-4.7.1-ru_RU.zip

unzip wordpress-4.7.1-ru_RU.zip

cp -rf /home/temp/wordpress /var/www/yuosite

Создадим базу данных для WordPress на нашем веб-сервере.

mysql -u root –p

Вводим пароль рута для MySQL

CREATE DATABASE wordpress;

CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'password';

GRANT ALL ON wordpress.* to 'wordpress'@'localhost' ;

flush privileges;

exit

Переименуем файл wp-config-sample.php файл в wp-config.php. и перетянем его на каталог выше.

cp /var/www/yousite/wp-config-sample.php /var/www/wp-config.php

Отредактируем wp-config.php

nano /var/www/wp-config.php

define('DB_NAME', 'wordpress');

define('DB_USER', 'wordpress');

define('DB_PASSWORD', 'youpass');

define('DB_HOST', 'localhost');

Тут генерим ключи https://api.wordpress.org/secret-key/1.1/salt/  и копируем их в соответствующую секцию файла, будет что-то такое:

define('AUTH_KEY',         '-x6`/&)+!dC,|j0{`fY66=;J%dls.^,0#R.-|Rp6Wwo$hNYdmk(rg#9ETgh-/p,o');

define('SECURE_AUTH_KEY',  'UfjG7H_sKL@.0NyIudiwYz<1m^CThelEiUo_@NucqH$JgK-{d|wJM|>Nw>M$]@[>');

define('LOGGED_IN_KEY',    '#qFY>5^nE`U.3y*7qXBw0T4u97+EGPxkFdaF;Tvf4`a~{v$rTE1B0{DzIhE_zy`7');

define('NONCE_KEY',        'RJ%.E<YI#!;9jvM<%bR^)4Xj.3meolw#Tv]+7k_k^<w+9DUpF=Z5[Q~HG)*@f1A|');

define('AUTH_SALT',        'f+bl^8tcL5 hf+Y|#Z./JPQWuelJ2BCwcc}c=hZE<e$E##q,@EH1prR):bjdj1[t');

define('SECURE_AUTH_SALT', '@K0wE-2elc:a5+!-lu&B/wLz(67ahaMjiD4.#_-BvmZycKu)G;1Pl4dF04|^rtKo');

define('LOGGED_IN_SALT',   'zDm9sEJ,o,ZQ-46DFz#eh|D. UqO_v.&3edt,[bJ/m7cGDH,!q1Rqf2@AE1!=,I6');

define('NONCE_SALT',       'UfYO-A!{_,d0|++ckvH^Z |(F?~fC2s|[<b~z@/1ZR`m~^QG.8l:_UKe!+AU@26i');

заменим префикс таблиц и поправим путь к директории:

$table_prefix  = 'lex_';

#Проверим путь к директории WordPress

if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');

#Включим шифрование SLL для админки

define('FORCE_SSL_ADMIN', true);

Установим wordpress.

Вводим в браузере данную ссылку:

https://youipaddress/wp-admin/install.php

После установки удалим установочный скрипт:

rm /var/www/yousite/wp-config-sample.php

Безопасность.

Если мы не вынесли, как я писал выше, конфигурационный файл на одну директорию выше от нашего сайта, то:

  • Запретим доступ к файлу  wp-config.php  извне при помощи файла  .htaccess . 

Очень важно убедиться, что файл  .htaccess  находится в той же директории что и файл wp-config.php

a2enmod rewrite
nano /var/www/.htaccess
chown www-data /var/www/.htaccess

<files wp-config.php>

Order deny,allow

deny from all

  • Запретим отображение ошибок на странице авторизации.

Достаточно добавить строку в файл  functions.php  вашей темы:

nano /var/www/yousite/wp-content/themes/youthema/functions.php
add_filter('login_errors',create_function('$a', "return null;"));
  • Изменим адрес входа в админку.

Для того, чтобы переименовать файл  wp-login.php  (тем самым изменить страницу входа) вам потребуется:

Изменим название файла wp-login.php на свое (например, login-yousite.php )

Скопируем это название, откроем переименованный файл login-mysite.php и с помощью текстового редактора заменим все слова wp-login.php на login-yousite.php

Откройте файл wp-includes/general-template.php и также произведите замену всех wp-login.php на login-yousite.php

После этих несложных манипуляций адресная строка входа в панель администратора изменится с  http:// yousite.net /wp-login.php на http:// yousite.net.login-mysite.php

Если все работает удаляем wp-login.php он больше не нужен. Но при таком раскладе введя http://yousite.net/wp-admin/ опять откроется окно авторизации, поэтому для надежности запретим все ip кроме той машины откуда будем админить.

nano /var/www/yousite/wp-admin/.htaccess

order deny,allow

allow from 178.158.103.10 192.168.1.20

deny from all

chown www-data /var/www/yousite.net/wp-admin/.htaccess

Чтобы он заработал правим конфигурационный файл нашего сайта:

nano /etc/apache2/sites-available/000-default.conf

<Directory /var/www/onedayadmin.sytes.net/wp-admin/>

        AllowOverride All

        Order allow,deny

        Allow from all

        </Directory>

/etc/init.d/apache2 restart
  • Запрещаем просмотр папок на нашем сервере.
nano /var/www/yousite.net/.htaccess

дописываем строку Options All –Indexes

  • Защищаем WordPress от XSS-инъекций.

Программисты обычно стараются защитить GET- и POST- запросы, однако, иногда этого недостаточно. Необходимо защитить блог от XSS-инъекций и попыток модификации переменных GLOBALS и _REQUEST.

Следующий код блокирует использование XSS-инъекций и попытки модифицировать переменные GLOBALS и_REQUEST. Вставьте код в файл  .htacces

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]

Код блокирует 403-й ошибкой запросы которые содержат тег <script> или попытку модифицировать значение переменных GLOBALS и _REQUEST.

  • Скрываем версию WordPress'a.

WordPress автоматически вставляет номер своей версии в исходный код страниц. К сожалению, не всегда удаётся вовремя обновлять движок. А это означает, что зная какая у вас версия WordPress’a со всеми её брешами и слабыми местами, злоумышленник может очень-очень огорчить вас.

Снова открываем  functions.php , лежащий в папке с активной темой нашего блога и добавляем туда этот код :

nano /var/www/yousites.net/wp-content/themes/youthemes/functions.php

add_filter('the_generator', '__return_empty_string');

function rem_wp_ver_css_js( $src ) {

    if ( strpos( $src, 'ver=' ) )

        $src = remove_query_arg( 'ver', $src );

    return $src;

}

add_filter( 'style_loader_src', 'rem_wp_ver_css_js', 9999 );

add_filter( 'script_loader_src', 'rem_wp_ver_css_js', 9999 );

Иногда необходимо скрыть версию от, например, владельца сайта (если вы разработчик сайта) или от пользователей, имеющих доступ к админке (администраторы сайта, контент-менеджеры). Версия WP в админке обычно выводится в футере. Если ее там нет, значит ваша тема оформления по умолчанию убирает сама.А если есть и ее надо убрать, то воспользуйтесь данным способом. В файле  functions.php  вашей темы необходимо добавить код:

function kill_footer_version ($default) {

return '';

}

add_filter ('update_footer', 'kill_footer_version', 999);

// Удаление сообщений "Спасибо, что выбрали WordPress"

function kill_footer_filter ($default) {

return '';

}

add_filter ('admin_footer_text', 'kill_footer_filter')

И наконец удалим два файла readme.html  и  license.txt которые содержат информацию о версии wordpress.

  • Плагин для защиты от зловредных url-запросов.

Хакеры и недохакеры всех родов очень часто пытаются найти слабые места при помощи всевозможных зловредных запросов. WordPress неплохо защищён от этого, но лишняя защита никогда не повредит. Установим и активируем плагин block-bad-queries.

https://wordpress.org/plugins/block-bad-queries/

  • Ограничим количество неудачных попыток авторизации.

Для борьбы с обычным брутом нам поможет плагин для wordpress под названием  wp-limit-login-attempts. Скачиваем и устанавливаем его.

https://uk.wordpress.org/plugins/wp-limit-login-attempts/

"Человеко понятные урлы".

WordPress по умолчанию при создании новой статьи или  страницы создает ссылки с примерно такого вида  /index.php?p=15. Это не очень удобно для чтения человеком, да и при поиске поисковики будут обращать внимание на то, что в ссылках содержатся слова и, если поисковый запрос будет частично или полностью совпадать с ссылкой, то они будут учитывать это. Поэтому применяются ЧПУ, выглядят они примерно так: https://onedayadmin.sytes.net/wordpress/.

nano /var/www/yousite.net/.htaccess

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

</IfModule>

Если не сработало проверим конфигурационный файл Apache.

nano /etc/apache2/apache2.conf

Должна быть директива AllowOverride All .

Заходим в https://yousite.net/wp-admin/

Настройки –> Постоянные ссылки -> Название записи   https://yousite.net/sample-post/  -> сохранить.

Автоматический перевод русских слов в ссылках сайта на транслит.

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

Скачиваем, разархивируем, ложим в папку plugin .

https://ru.wordpress.org/plugins/cyr3lat/

Включаем его в настройках wordpress. И проверяем Настройки->ПостоянныеСсылки->НазваниеЗаписи-> https://yousite.net/sample-post/

Ставим редактор текста TinyMCE Advanced.

Редактировать текст нашей статьи или просто страниц гораздо удобнее редактором с расширенными возможностями, для этого установим плагин TinyMCE Advanced.

Установка стандартная – после скачивания по ссылке https://ru.wordpress.org/plugins/tinymce-advanced/ разархивируем и загружаем на фтп блога в папку wp-content/plugins. Включаем его. Настройки данного плагина в пункте настройки-> TinyMCE Advanced.

Отключаем комментарии в статьях.

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

Настройки -> снять галочку «разрешить оставлять комментарии на новые статьи».