Konfigurasi .htaccess untuk wordpress supaya agak aman

Webserver

Haduhh… akhirnya ada beberapa website subdomain telkomuniversity.ac.id yang terkena deface. Makhluk apaan sih itu “deface”?

Deface adalah salah satu tindakan merubah tampilan suatu website baik halaman utama ataupun halaman lain yang masih terkait dalam suatu url dengan website tersebut.

Yang paling mudah dihajar adalah merubah isi index.php dari suatu halaman website, karena biasanya default untuk load suatu website adalah index.php tersebut. Selain index.php, si hacker yang melakukan deface pada suatu website akan menyimpan backdoor, agar defacenya bisa dijalankan kembali apabila sudah diperbaiki si index.php-nya.

Kenapa sih si index.php bisa dirubah? bukankah seseorang yang ingin merubah konten file suatu website harus memiliki akses ke web, berupa akses ftp dan admin web? Well.. sebetulnya sih iya, namun kadang konfigurasi web dan hosting yang salah bisa menyebabkan suatu web memiliki celah-celah bolong yang mengakibatkan si hacker bisa masuk dan melakukan perubahan di website kita.

Penyebab celah bolong ini diantaranya:

  1. Konfigurasi server yang asal hidup, tanpa ada konfigurasi tambahan keamanan dan pertahanan khusus (security and firewall), serta konfigurasi hak akses folder yang salah.
  2. Tidak pernah mengupdate server
  3. Install cms dengan standar (tidak banyak modifikasi khusus)
  4. Tidak menambahkan plugin security dan firewall dengan benar dan tepat
  5. Tidak pernah mengupdate cms beserta plugin-nya
  6. Pilihan password akses yang mudah ditebak
  7. Terlalu banyak orang yang manangani admin namun tidak terkendali

Untuk mencegah kejadian yang tidak diinginkan, maka sebaiknya lakukan tindakan kebalikan dari yang diterangkan diatas.

 

Khusus untuk poin 1, saya akan menerangkan mengenai tambahan keamanan berupa menambah file .htacces di folder root website kita, utamanya untuk CMS WordPress.

.htaccess sendiri artinya Hyper Text Access, merupakan file yang biasanya dijadikan rujukan akses web server untuk akses file-file dalam suatu website.

 

Isi .htaccess untuk CMS WordPress standarnya pada folder root adalah:

BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
END WordPress

.htaccess untuk WordPress
.htaccess untuk WordPress

Sudah untung dan bagus kalau punya .htacces dengan isi seperti itu, apabila ingin lebih mantap, bisa ditambahkan isian lainnya, yaitu sebagi berikut:

  1. Isian .htaccess untuk melindungi file .htaccess itu sendiri dari usahan untuk merubah isi ataupun menghapus, isinya adalah;# STRONG HTACCESS PROTECTION
    </code>
    <Files ~ “^.*\.([Hh][Tt][Aa])”>
    order allow,deny
    deny from all
    satisfy all
    </Files>
  2. Pencegahan untuk tidak memperbolehkan membaca folder websitedisable directory browsing# disable directory browsing
    Options All -Indexes
  3. Proteksi wp-config.php dari usaha pembacaan, perubahan, penghapusan. wp-config.php adalah file yang berisi koneksi database website ber CMS WordPress, dan ini merupakan file penting yang memastikan website wordpress bisa hidup.# protect wp-config.php
    <files wp-config.php>
    Order deny,allow
    Deny from all
    </files>
  4. Mencegah injeksi script, dengan melakukan ini maka WordPress blog anda akan aman dari usaha script injection dan akses yang tidak diinginkan dan usaha perubahan _REQUEST and/or GLOBALS.# protect from sql injection
    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]

Jadi secara keseluruhan isi .htaccess yang lebih advance untuk CMS WordPress di folder admin/root adalah:

 

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# STRONG HTACCESS PROTECTION
</code>
<Files ~ “^.*\.([Hh][Tt][Aa])”>
order allow,deny
deny from all
satisfy all
</Files>
# disable directory browsing
Options All -Indexes
# protect wp-config.php
<files wp-config.php>
Order deny,allow
Deny from all
</files>
# protect from sql injection
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]
# END WordPress

 

Sebagai tambahan, ada baiknya menambahkan .htacces di folder wp-content, karena isi folder itu berhubungan dengan themes, plugin, dan real content website, isinya sebaiknya sebagai berikut:

Order deny,allow
Deny from all
<Files ~ “.(xml|css|jpeg|png|gif|js)$”>
Allow from all
</Files>

 

Tambahkan file lainnya yang dikira sangan penting, misalnya file ekstensi office dan zip, jangan pernah menambahkan ekstensi file yang bisa executable.

 

Silakan berikan komentar, pertanyaan, maupun sanggahan. InsyaAllah dibalas secepatnya.