Skip to content
Hardening WordPress wp-config

Hardening WordPress, configurarea wp-config.php pentru securitate

Hardening WordPress, configurarea wp-config.php pentru securitate. Fișierul wp-config.php este cel mai important fișier de configurare WordPress, conținând credențialele bazei de date, cheile de securitate și constantele care controlează comportamentul întregii aplicații.

O configurare corectă a wp-config.php poate preveni categorii întregi de atacuri. Acest fișier este prima linie de apărare a instalării dumneavoastră WordPress.

Hardening WordPress, configurarea wp-config.php pentru securitate

Fișierul wp-config.php este încărcat la fiecare cerere către site-ul WordPress. Constantele definite aici controlează securitatea sesiunilor, accesul la fișiere, comportamentul debug-ului și multe alte aspecte critice ale securității.

Vom parcurge fiecare secțiune a fișierului wp-config.php și vom explica configurările optime de securitate.

Cheile de securitate și salt-urile

Cheile de securitate WordPress (AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY și salt-urile asociate) sunt folosite pentru criptarea cookie-urilor de sesiune. Chei slabe sau implicite permit atacatorilor să forjeze cookie-uri de autentificare.

// Generare chei unice de la: https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY',         'cheia-unică-generată-aleator-1');
define('SECURE_AUTH_KEY',  'cheia-unică-generată-aleator-2');
define('LOGGED_IN_KEY',    'cheia-unică-generată-aleator-3');
define('NONCE_KEY',        'cheia-unică-generată-aleator-4');
define('AUTH_SALT',        'cheia-unică-generată-aleator-5');
define('SECURE_AUTH_SALT', 'cheia-unică-generată-aleator-6');
define('LOGGED_IN_SALT',   'cheia-unică-generată-aleator-7');
define('NONCE_SALT',       'cheia-unică-generată-aleator-8');
# Generare chei din linia de comandă
curl -s https://api.wordpress.org/secret-key/1.1/salt/

# Sau cu WP-CLI
wp config shuffle-salts
  • Generați chei unice pentru fiecare instalare WordPress, nu copiați din exemple
  • Schimbați cheile imediat dacă suspectați o compromitere a site-ului
  • Schimbarea cheilor invalidează toate sesiunile active, deconectând toți utilizatorii
  • Regenerați cheile cel puțin o dată pe an ca măsură preventivă
  • Fiecare cheie trebuie să fie unică, nu folosiți aceeași valoare pentru mai multe chei

Configurarea bazei de date securizate

Credențialele bazei de date sunt stocate în text clar în wp-config.php. Protejarea acestui fișier și utilizarea unor configurări optime de bază de date sunt esențiale.

// Configurare bază de date
define('DB_NAME', 'wps_database');
define('DB_USER', 'wps_db_user');
define('DB_PASSWORD', 'PAROLA-COMPLEXĂ-MINIMUM-24-CARACTERE');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', 'utf8mb4_unicode_ci');

// Prefix tabele personalizat (NU wp_ implicit!)
$table_prefix = 'wps26_';
  • Niciodată nu folosiți utilizatorul root al bazei de date pentru WordPress
  • Creați un utilizator dedicat cu permisiuni doar pe baza de date WordPress
  • Parola bazei de date trebuie să fie complexă, minimum 24 de caractere
  • Schimbați prefixul implicit wp_ pentru a preveni atacurile SQL injection automatizate
  • Setați charset la utf8mb4 pentru suport complet Unicode
# Creare utilizator dedicat bază de date (din MySQL)
CREATE USER 'wps_db_user'@'localhost' IDENTIFIED BY 'PAROLA_COMPLEXA';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER
ON wps_database.* TO 'wps_db_user'@'localhost';
FLUSH PRIVILEGES;

Constante de securitate esențiale

WordPress definește constante care controlează funcționalități cu impact direct asupra securității. Configurarea corectă a acestora este un pas fundamental în hardening.

// Dezactivare editor fișiere din wp-admin
define('DISALLOW_FILE_EDIT', true);

// Dezactivare instalare/actualizare plugin-uri din interfață
define('DISALLOW_FILE_MODS', true);

// Forțare SSL pe admin
define('FORCE_SSL_ADMIN', true);

// Forțare SSL pe login
define('FORCE_SSL_LOGIN', true);

// Dezactivare afișare erori PHP
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', false);
ini_set('display_errors', 0);

// Dezactivare WP-Cron automat (folosiți cron server)
define('DISABLE_WP_CRON', true);

// Dezactivare concatenare scripturi
define('CONCATENATE_SCRIPTS', false);

// Limitare revizuiri postări
define('WP_POST_REVISIONS', 5);

// Golire coș de gunoi la 7 zile (implicit 30)
define('EMPTY_TRASH_DAYS', 7);

// Blocare cereri HTTP externe (permite doar cele necesare)
// define('WP_HTTP_BLOCK_EXTERNAL', true);
// define('WP_ACCESSIBLE_HOSTS', 'api.wordpress.org,downloads.wordpress.org');
  • DISALLOW_FILE_EDIT elimină complet posibilitatea de editare cod din browser
  • DISALLOW_FILE_MODS previne instalarea de plugin-uri dintr-un cont admin compromis
  • WP_DEBUG dezactivat previne expunerea informațiilor despre structura codului
  • WP_HTTP_BLOCK_EXTERNAL previne conexiunile neautorizate din WordPress (atenție la compatibilitate)

Mutarea wp-config.php în afara directorului public

WordPress suportă nativ mutarea fișierului wp-config.php cu un nivel deasupra directorului public_html. Aceasta previne accesul direct la fișier prin browser în cazul unei configurări greșite a serverului.

# Structura actuală
/home/user/public_html/wp-config.php
/home/user/public_html/wp-settings.php

# Mutare wp-config.php un nivel mai sus
mv /home/user/public_html/wp-config.php /home/user/wp-config.php

# WordPress va detecta automat fișierul în directorul părinte
# NU este necesară nicio altă modificare

# Verificare permisiuni
chmod 400 /home/user/wp-config.php
chown user:www-data /home/user/wp-config.php
  • WordPress caută automat wp-config.php în directorul părinte dacă nu îl găsește în rădăcină
  • Această tehnică funcționează doar dacă WordPress este instalat în rădăcina subdirectorului
  • Setați permisiunile la 400 (doar citire de către proprietar) după mutare
  • Testați site-ul imediat după mutare pentru a verifica funcționalitatea

Protejarea wp-config.php prin .htaccess

# Adăugare în .htaccess principal
<Files wp-config.php>
    Order Allow,Deny
    Deny from all
</Files>

# Protecție suplimentară: blocare acces la fișiere sensibile
<FilesMatch "(wp-config.php|readme.html|license.txt|install.php|error_log)$">
    Order Allow,Deny
    Deny from all
</FilesMatch>

# Blocare acces la fișiere .htaccess și .htpasswd
<FilesMatch "^.ht">
    Order Allow,Deny
    Deny from all
</FilesMatch>

Configurare completă wp-config.php recomandată

<?php
// Forțare HTTPS
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

// Baza de date
define('DB_NAME', 'wps_database');
define('DB_USER', 'wps_db_user');
define('DB_PASSWORD', 'PAROLA_COMPLEXA_24_CARACTERE');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', 'utf8mb4_unicode_ci');
$table_prefix = 'wps26_';

// Chei de securitate (generați de la API WordPress)
// ... cheile generate ...

// Securitate
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);
define('FORCE_SSL_ADMIN', true);
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', false);
define('DISABLE_WP_CRON', true);
define('CONCATENATE_SCRIPTS', false);
define('WP_POST_REVISIONS', 5);
define('EMPTY_TRASH_DAYS', 7);
define('WP_AUTO_UPDATE_CORE', 'minor');

// Cookie securizat
define('COOKIE_DOMAIN', 'www.wpsecurity.ro');
define('COOKIEPATH', '/');
define('ADMIN_COOKIE_PATH', '/wp-admin');

if (!defined('ABSPATH')) {
    define('ABSPATH', __DIR__ . '/');
}
require_once ABSPATH . 'wp-settings.php';

Configurarea corectă a wp-config.php este baza securității WordPress. Pentru audit complet al configurării, consultați securitate cibernetică și blogul nostru. Echipa WPSecurity oferă servicii speciale de hardening WordPress, contactați-ne pentru implementare profesională.

Despre autor

Dorel Tănase este specialist în optimizarea site-urilor pentru motoarele de căutare. Lucrează în online din 1997 și în SEO din 2007, iar activitatea se desfășoară prin GO SEO MARKETING S.R.L. din Alba Iulia. Se ocupă de audit tehnic, arhitectura site-urilor, conținut și construirea legăturilor.

Sus