WordPress inpenetrabil .

This article has been written before more than 24months, information might old.

Articolul acesta va prezenta cele mai paranoice metode de a securiza un blog care foloseste platforma wordpress , vom incepe cu cele mai comune si de bun simt metode dupa care o sa trecem si la lucruri mai avansate .

1 Primul lucru de bun simt este sa aveti o parola a administratorului diferita de orice alta parola a orcarui alt cont , este indicat ca parola sa fie de peste 150 bites si sa arate cam asa : ” j2R;O2XfaeMI%Ngy5Ae>+m8Uf „.

2 Nu folositi ca nume de logare numele „admin” care exista din oficiu la wordpress , acel nume nu merge schimbat din wordpress direct dar merge cu orice alt manager de mysql (navicat , mysql administrator , phpmyadmin ) , prin query-ul

UPDATE `nume-baza-de-date`.`nume-tabela-useri` SET `user_login` = 'noul-nume-pt-login' WHERE `nume-tabela-useri`.`display_name` ='nume-de-display' LIMIT 1 ;

din pacate id-ul nu se poate schimba pentru ca el ne asigura statutul de administrator .

3 Nu folositi prefixul de tabele acordat din oficiu „wp_” schimbati-l in ceva de genul „w843d32_” si nu uitati sa modificati si wp-config.php dupa ce ati schimbat acest prefix la toate tabelele .

4 Este indicat sa aveti un singur Javascript encriptat ca cel de aici
http://azrael-sub7.ro/wp-content/plugins/script-compressor/jscsscomp.php?q=wp-content/plugins/vipers-video-quicktags/resources/swfobject.js?ver=2.1 puteti face asta folosind pluginul script-comprerssor .

5 Nu lasati fisierul wp-config.php accesibil , cea mai utilizata metoda este sa introduceti in .htaccess urmatorul cod :

# Protect wpconfig.php
<FILES wp-config.php >
order allow,deny
deny from all
</FILES>

6 Nu lasati datele de conectare in wp-config.php , cel mai bine e ca datele de conectare sa se afle intr-un folder care nu este accesibil pe internet , acum la majoritatea hosturilor (care sunt pe distributii *nix) folderul in care este webiste-ul este /home/nume-cont/public_html/ deci cel mai convenabil este sa separam wp-config.php in 2 fisiere iar fisierul ce contine datele de conectare sa fie pus in /home/nume-cont/ , deci fisierul care il vom muta va arata asa :

<?php
 /* This file is used by the wp-config.php creation script during the
 * installation. You don't have to use the web site, you can just copy this file
 * to "wp-config.php" and fill in the values.
 *
 * @package WordPress
 */

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'db-mysql');

/** MySQL database username */
define('DB_USER', 'user-mysql');

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

/** MySQL hostname */
define('DB_HOST', 'host-mysql');
?>

iar cealata care va ramane pe servar

7 Daca webhostul tau suporta ssl poti forta ssl in administratie prin adaugarea liniei define(‘FORCE_SSL_ADMIN’, true); in wp-config.php .

8 Userul de mysql nu trebuie sa aiba toate privilegile , userul care il folosesti ca sa te conectezi la mysql poate avea numai urmatoarele privilegii :
select, insert, update, delete , create, drop and alter .

9 Nu permiteti vizualizarea folderelor , metoda asta e cunoscuta dar totusi e foarte folositoare , tot ce trebuie sa facem e sa introduceti in .htaccess urmatorul cod :

# Prevents directory listing
Options -Indexes

10 Legati cookie-urile de ip folosind Safer cookies .

11 Ascundeti folderul wp-admin asta se poate face folodind stealth-login , eu am reperat insa un mic bug la acest plugin , si anume ca pe ultimele versiuni de wordpress actuale ( 2.7.1 ) daca instalezi acest plugin pe orice director in afara de index iti face redirect catre autentificare , dar acest bug merge fixat destul de usor , dupa ce stealth-login va genereaza .htaccess-ul intrati manual in .htaccess si cautati urmatoarea linie partiala :

wp-login.php?stealth_out_key

dupa acea linie puneti urmatoarele linii

RewriteCond %{REQUEST_URI} wp-admin/
RewriteCond %{REQUEST_URI} wp-login\.php

aceste doua linii vor specifica clar ca numai in cazul in care se cer acele doua locatii sa functioneze RewriteRule .

12 Scoateti meta-tagul care raporteaza versiunea de wordpress cel mai simplu mod de a face asta este sa modificatii function.php din interiorul templatului si sa puneti in el urmatorul cod :

//Security
remove_action('wp_head', 'wp_generator');

13 Restrictionati accesul pe ip in folderu-ul wp-admin cel mai simplu mod prin adaugarea unei file .htaccess cu codul :

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "Security R1"
AuthType Basic
<LIMIT GET >
order deny,allow
deny from all
allow from ip
allow from ip
allow from ip
</LIMIT>

14 Restrictionati orice conexiune la mysql care nu provine din localhost .

15 Folositi transfer prin sftp , cand folositi transferul prin ftp obisnuit parola se trimite sub forma de text , ceea ce nu este foare indicat ..

16 Restrictionati indexarea folderelor ce incep cu wp- , in robots.txt trecem :

User-agent: Googlebot
Disallow: /wp-
Disallow: /uploads/
Disallow: /feed/
Disallow: /comments/feed
Disallow: /feed/$
Disallow: /*/feed/$
Disallow: /*/feed/rss/$
Disallow: /*/*/feed/$
Disallow: /*/*/feed/rss/$
Disallow: /*?*

User-agent: *
Disallow: /wp-
Disallow: /uploads/
Disallow: /feed/
Disallow: /comments/feed
Disallow: /feed/$

User-agent: Googlebot-Image
Disallow:
Allow: /*

acest cod interzice si indexarea feed-ului pentru a nu produce in google continut dubicat .

17 Folositi login-lockdown pentru a va proteja impotriva unui posibil atack brute force .

18 Folositi login-encryption pentru a securiza autentificarea prin algoritmele rsa si dsa .

19 Upgradati mereu wordpress-ul la ultima versiune .

20 Si nu in ultimul rand verificati dupa fiecare update fiecare variabila $_GET sau $_POST din website impotriva atacurilor de tip Xss si SQL INJECT .

21 Rewrite in functie de ip se poate face cu urmatorul cod in .htaccess :

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} wp-login.php
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.0
RewriteRule .* http://www.domain.com/ [R,L]
</IfModule>

Optional :
21 Puteti instala si un „firewall” de tip php care sa blocheze atacurile Xss, sql inject si anumite programe de crawl sau folositi scriptul php de configurare a ip-tables (mai recomandat ) .
Exista si alte metode mai avansate de protectie dar nu se pot aplica decat daca aveti un servar dedicat

Share the joy

One Response

  1. Ordis august 24, 2009

Leave a Reply