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 servar7
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 :
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
La data de : August 24th, 2009 la ora 1:00 pm
Ordis, A scris :
Informatii super ok
Multumim