Хей, имам нещо специално за теб!

5 грешки, които допускаш по време на интервю

Попълни имейл адрес, на който до минута ще получиш обещаното ;)

wp-config.php - пълно ръководство

⚙️wp-config.php – как да настроиш своята WordPress инсталация [ultimate guide]

Научи как да персонализираш настройките на своя WordPress уеб сайт, а също и да го подсигуриш, чрез wp-config.php

Един от най-важните файлове (да не кажа и най-важния) в който и да е WordPress уеб сайт е т.нар. конфигурационен файл, или wp-config.php. Той „живее“ в основната директория на инсталацията и се състои от дефиниции и PHP инструкции, които карат WordPress уеб сайта да функционира по желаният от нас начин.

Файлът wp-config.php съдържа информация относно базата данни, префикса на всички таблици в нея, пътища до специфични директории и много други настройки, отнасящи се до конкретни функционалности, които ще разгледаме в този урок. Важно: без този файл WordPress не би функционирал.

Как изглежда един базово конфигуриран wp-config.php файл

Когато първоначално инсталираш WordPress, системата изисква от теб да въведеш информация, като например име на базата данни и префикс на таблиците в нея. Доста често тази информация се подава и настройва от доставчика на хостинг услугата, която използваш, но ако създаваш нова инсталация локално (без да използваш софтуер за локален сървър като Local by Flywheel или DevKinsta), ще се наложи ръчно да въведеш тези данни:

А ето и как изглежда съдържанието на един базов wp-config.php файл:


/** The database name */
define('DB_NAME', 'database_name_here');

/** MySQL database username */
define('DB_USER', 'username_here');

/** MySQL database password */
define('DB_PASSWORD', 'password_here');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

define('AUTH_KEY',		'devblondie');
define('SECURE_AUTH_KEY',	'devblondie');
define('LOGGED_IN_KEY',		'devblondie');
define('NONCE_KEY',		'devblondie');
define('AUTH_SALT',		'devblondie');
define('SECURE_AUTH_SALT',	'devblondie');
define('LOGGED_IN_SALT',	'devblondie');
define('NONCE_SALT',		'devblondie');

$table_prefix  = 'wp_';

/* That's all, stop editing! Happy blogging. */

Както споменах по-горе, обикновено този файл се генерира автоматично и няма нужда да правиш каквото и да е. В редки случай, обаче, в зависимост от самата инсталация, WordPress няма права да създава нови файлове в директорията на апликацията, затова е необходимо да създадеш празен wp-config.php файл, след което да копираш съдържанието от файл wp-config-sample.php и да редактираш информацията по начин, който работи за теб.

Забеляза ли коментара /* That's all, stop editing! Happy blogging. */ в снипета по-горе? Има причина да бъде там. Точно след него е мястото, на което може да добавяш своите къстъм настройки, като трябва да внимаваш това да се случва до този коментар:

/* That's all, stop editing! Happy blogging. */

А това е така, защото постоянните дефиниции и PHP настройки идват в определен и слецифичен ред, който не бива да нарушаваш (ако искаш сайта ти да функционира правилно 😀 ).

Какви са тези дефиниции?

  • DB_NAME – тук указваме името на базата данни, която сме създали;
  • DB_USER – тук указваме име на потребителя, които има достъп до базата данни
  • DB_PASSWORD – паролата, която отговаря на потребителя по-горе
  • DB_HOST – мястото, на което се хоства базата данни
  • DB_CHARSET
  • DB_COLLATE

Важното, което трябва да запомниш тук, е че тези константи са индивидуални за всеки сайт, над който работиш и следва да не се преизползват. В това число разбирай, че дори локална среда, staging и production среда на един и същи сайт трябва да имат различни стойности за тези константи.

Подсигуряване на уеб сайта чрез wp-config.php

Има няколко стъпки, коит може да предприемеш, за да зашитиш сайта си от злонамерени хакери, и всяка от тях включва редакции на wp-config.php файла (разбира се, има и още методи, които може да приложиш в тази посока). Нека ги разгледаме поотделно:

Защитаване на самият wp-config.php файл ?

Както споменах в началото на тази статия, обикновено (и по подразбиране), wp-conig.php файлът се намира в основната директнория на една WordPress инсталация, а вече видяхме, че той съдържа много чувствителна информация, като достъп до база данни, salt ключове и др. Е, не искаш тази информация да е публично достояние за всеки, който изпише www.именасайта.com/wp-config, нали?

Спокойно, повечето хостинг компании ще преместят местоположението на файла за теб, но в случай, че трябва сам да го направиш. Просто го премести в друга директория (една над тази, в която е WordPress инсталацията, например), или промени достъпа (тоест забрани го) до този файл.

И на последно, но не по значение място, никога не качваш wp-config.php файла в Git repository-то, в което работиш. Особено пък ако е публично 😀 Може да използваш команда в .gitignore файла, за да забраниш качването му в Git.

Ротиране на ключове и salts ?

Какво представляват?

Няма лесен и еднозначен начин, по който да се обаясни какво представляват ключовете и salt-овете, затова може да приемем, че са просто още един низ от случайни и без никакъв определен ред символи, които добавят допълнителен слой криптиране и сигурност.

Защо да ги ротираме?

Ротиране тук стои зад подмяна, промяна. Добре е тези низове да се променят регулярно, а ако е установена хакерска атака, то трябва да се сменят на момента.

Има един малък проблем

Смяната на тези стойности не е просто „добавям новите и си свиркам“. Това ще ресетне всички кукита и всички, които са логнати в сайта, ще бъдат „изхвърлени“, а всички запазени продукти в количката на WooCommerce ще бъдат премахнати.

И все пак.. как да ги промениш?

Има няколко начина, чрез които може да промениш тези стойности. Първият, разбира се, е да влезеш в wp-config.php файла и да започнеш да натискаш произволни клавиши по клавиатурата. Но това.. не звучи много професионално. Ето и по-удачните методи:

  • Ръчно променяне на стойностите, използвайки генератор за такива ключове – копираш и поставяш. И спокойно, всеки път тези стойности са различни.
  • Може да използваш плъгин, повечето такива за сигурност разполагат с опция за ротиране на тези стойности
  • Чрез WP-CLI (за напреднали разработчици) с командата wp config shuffle-salts

Забраняване редактиране на файлове ?‍♀️

WordPress ни дава възможност за бързо редактиране на всички файлове в темата, както и във всички плъгини. Това става от меню -> Appearance-> Theme File Editor. Това е обезпокояващо, особено ако разработваш сайт за клиент, който обича да „пипа в кода“. Добрата новина е, че през wp-config.php може да забраниш такива редакции със следната команда:

define( 'DISALLOW_FILE_EDIT', true );

Разбира се, ако клиента (или човекът, който има достъп до администрация) реши, може да инсталира плъгин, който да override-не този ред код и отново да има достъп до файловете на уеб сайта.

Забраняване инсталирането на нови плъгини ?

Е, както вероятно се досещаш, може да забраниш и инсталирането на нови плъгини (особено полезно, когато имаш клиент, който инсталира плъгин за всяка своя прищявка и накрая сайта се оказва с 70 разширения, от които само 7 са необходими и важни). Това се случва със следната команда в wp-config.php файла:

define( 'DISALLOW_FILE_MODS', true );

Забраняване на автоматичните ъпдейти ?

Автоматичното обновяване ядрото на WordPress, както и на инсталираните плъгини, може да звучи удобно и практично, но не винаги е добра идея. Първо – заради несъвместимост във версии на плъгини, второ – заради проблеми с ядрото и конфигурацията на сървъра.

С няколко кратки команди през wp-config.php ще спреш автоматичните ъпдейти и ще имап възможност да обновяваш софтуера по свое усмотрение и начин:

# Disable all core updates:
define( 'WP_AUTO_UPDATE_CORE', false );

# Enable all core updates, including minor and major:
define( 'WP_AUTO_UPDATE_CORE', true );

# Enable core updates for minor releases (default):
define( 'WP_AUTO_UPDATE_CORE', 'minor' );

Ограничаване на външни HTTPS заявки ?

Последната точка по отношение на сигурност, която ще разгледаме, е блокирането на външни HTTPS заявки. Това означава, че WordPress инсталацията няма да може да комуникира с външни източници и т.нар. API-та, или пък да сваля ъпдейти.

И да, осъзнавам, че множество WordPress сайтове се свързват към third party апликации, за да обменят данни, но именно думата „обменят“ е проблемна тук – доста често WordPress освен, че дърпа информация, изпраща такава (което е супер за разработчиците, защото им дава информация за потреблението на софтуера им, но е лошо по отношение на чувствителността на данните).

В тази връзка, можеш или изцяло да забраниш външните HTTPS заявки с тази команда в wp-config.php:

define( 'WP_HTTP_BLOCK_EXTERNAL', true );

Или ако все пак трябва да позволяваш HTTPS заявки към определени сайтове, то поне да ги укажеш изрично и да забраниш всички останали с тази команда:

define( 'WP_ACCESSIBLE_HOSTS', 'api.wordpress.org,*.github.com' );

Промяна на местоположение и имена на таблици, преместване на файловата структура

WordPress и неговата файлова система са отлично познати на хакерите. В крайна сметка, една бърза инсталация на CMS-a показва всички директории и файловете в тях, а бърз поглед в базата данни дава яснота за нейните таблици и тяхната организация. И тъй като наблягаме на сигурността, в следващите няколко реда ще ти покажа как можеш да преместиш основни директории извън ядрото на WordPress, както и да преименуваш и преместиш основни таблици.

Промяна префикса на базата данни

По подразбиране всяка WordPress инсталация е с префикс на базата данни wp_. Този префикс автоматично се добавя на всички таблици в базата данни (12 броя), както и на други места.

Най-лесният начин за един небдоброжелателен хакер да достъпи уеб сайта ти, е чрез манипулиране на стойности в базата данни. Затова и като превентивна мярка, едно от първит енеща, които е добре да направиш при нова инсталация, е да промениш префикса, а това става със следната команда в wp-config.php файла:

$table_prefix = 'az1hos_';

По този начин таблица, която се е казвала wp_posts, вече ще бъде az1hos_posts.

Преместване на uploads папката, както и папката с плъгини

Напълно възможно (а и препоръчително) е да преместиш wp-content, uploads, themes и plugins папките от местоположението им по подразбиране.

За да преместим wp-content папката, е необходимо да дефинираме две константи. Първата от тях определя пълният адрес на папката:

define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/my-site/wp-content' );

Втората определя новият URL на папката:

define( 'WP_CONTENT_URL', 'http://example.com/my-site/wp-content' );

За да променим местоположението на папката с плъгините, можем да използваме следните две константи:

define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/wp-content/mynewdir/plugins' );
define( 'WP_PLUGIN_URL', 'http://example.com/wp-content/mynewdir/plugins' );

По същия начин може да променим и местоположението на uploads папката:

define( 'UPLOADS', 'wp-content/mydir/uploads' );

Промяна настройките на съдържанието

WordPress е преди всичко система за управление на съдържанието (CMS). И като такава, позволява да го управляваме по многообразни начини, както и да променяме настройките му чрез wp-config.php. Нека разгледаме някои от тях.

Промяна на site url и dashboard url

Настройването на WP_HOME и WP_SITEURL презаписва home и siteurl записите в wp_options таблицата в базата данни:

define( 'WP_HOME', 'https://devblondie.com' );
define( 'WP_SITEURL', 'https://devblondie.com/wordpress` );

Най-често използваме тези константи, когато местим сайт от един URL на друг (смяна на домейн).

Ревизии на публикации

По тази тема съм създала отделна статия/урок с видео към нея, но ще ти кажа накратко и тук.

По подразбиране WordPress автоматично запазва всяка промена на страница или публикация. И ако това може да звучи супер за клиентите или хората, които обслужват съдържанието, то далеч не е така за хората, които поддържат базата данни и техническото състояние на сайта. Резвизиите затлачват базата данни и я правят ненужно голяма.

За да превентираш това, може или тотално да ги изключиш:

define( 'WP_POST_REVISIONS', false );

Или да ги ограничиш:

define( 'WP_POST_REVISIONS', 5 );

Вместо заключение

wp-config.php предлага много възможности за персонализиране, сигурност и надграждане на всеки WordPress уеб сайт. Надявам се с този (убийствено) дълъг урок/статия ти е станало по-ясно какви са неговите сили и как можеш да се възползваш на максимум от тях.

Stay blond 😉

Остави коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *