Celah Keamanan WordPress dan .htaccess
Posted by Poer on Jun 15, 2010 in Tips and Tricks | 33 comments
Kemaren dulu ada pembahasan mengenai celah keamanan WordPress yang dibahas di forum Adsense-ID. Celah keamanan WordPress ini memberikan kesempatan pada pihak ketiga untuk mendapatkan username CPanel hosting yang kita gunakan.
Target URL: http://alamatblogwp.com/wp-includes/wp-db.php
Pesan Error: Fatal error: Call to undefined function wp_die() in /home/USERNAME/public_html/wp-includes/wp-db.php on line 1039
Target URL tidak hanya file wp-db.php dalam folder wp-includes, tapi ada banyak file .php lainnya yang juga akan menghasilkan pesan error yang sama.
Nah untuk menghindari munculnya error tersebut, aku menggunakan .htaccess untuk memblokir semua akses ke file bertipe .php yang ada di dalam folder wp-content dan wp-includes. Yang diperbolehkan hanya akses ke file-file bertipe .css, .jpeg, .jpg, .png, .gif, dan .js.
Kode .htaccess yang aku gunakan seperti ini:
Order Allow,Deny
Deny from all
<Files ~ “\.(css|jpe?g|png|gif|js|xml|swf)$”>
Allow from all
</Files>
File .htaccess-nya ditempatkan langsung di dalam folder wp-content dan wp-includes itu sendiri. Terpisah dengan file .htaccess yang ada di root folder (/public_html/).
Tanpa aku sadari, kode .htaccess tersebut ternyata mengakibatkan beberapa masalah baru. Biarpun ga segawat jika orang lain mendapatkan username ke CPanel hosting, tapi sempat bikin aku jengkel dan bingung kenapa hal itu bisa terjadi hihihi…
Masalah 1. Hilangnya panel TinyMCE dari halaman editor.
Padahal panel itu berguna banget buat nulis ataupun mengedit postingan. Sampe kangen sama fungsi Full Screen-nya
Tebakan pertama ada file TinyMCE di folder wp-includes yang rusak, tapi setelah beberapa kali upload ulang folder wp-includes tanpa menyelesaikan masalah, aku tahu kalau masalahnya ga sesederhana itu.
Baru kemaren ketika aku menambahkan file .htaccess ke folder wp-includes di situs baruku, barulah aku curiga kalau masalahnya ini sebenarnya terjadi karena ada file yang terblokir oleh kode keamanan di dalam file .htaccess tersebut.
Sedikit trial and error, berikut ini kode .htaccess yang baru untuk diletakkan di dalam folder wp-includes. Tetap memblokir akses ke file .php, dengan memberikan sedikit akses agar panel TinyMCE di post editor dapat bekerja dg baik.
Order Allow,Deny
Deny from all
<Files ~ "\.(css|jpe?g|png|gif|js|xml|swf)$">
Allow from all
</Files>
<Files "wp-tinymce.php">
Allow from all
</Files>
Masalah 2. WP-PostRatings plugin berhenti bekerja.
WP-PostRatings plugin itu fungsinya memungkinkan pengunjung untuk memberikan rating terhadap postingan kita. Tampilannya bisa berupa bintang, progress bar dll.
Ketika masih menggunakan .htaccess versi original diatas, biarpun rating-nya tetap muncul, tapi pengunjung tidak dimungkinkan untuk memberikan rating.
Permasalah kemudian terselesaikan setelah kode .htaccess untuk folder wp-content aku rubah menjadi seperti ini:
Order Allow,Deny
Deny from all
<Files ~ "\.(css|jpe?g|png|gif|js|xml|swf)$">
Allow from all
</Files>
<Files "wp-postratings.php">
Allow from all
</Files>
Dengan perubahan ini, kita memberikan akses khusus ke file wp-postratings.php yang dibutuhkan oleh plugin WP-PostRatings agar dapat bekerja dengan baik.
Setiap blog tentunya mempunyai settingan sendiri-sendiri, tapi dengan menggunakan prinsip .htaccess diatas, kita bisa menutup satu celah keamanan di WordPress dengan tetap memberikan akses ke fitur ataupun plugin yang dibutuhkan.
Untuk konfirmasi, selain kedua masalah diatas, sampai saat ini aku belum menemukan masalah lain terkait penggunaan kode .htaccess diatas. Blog WordPress tetap bekerja dengan baik biarpun akses pengunjung ke file .php di folder wp-includes dan wp-content dibatasi.
Salam
[Poer]
htaccess, htaccess poer, htaccess wp-includes, wordpress htacces error, celah KEMANANAN wordpress, ht access, logo jpg ga muncul wordpress



Terima kasih ilmunya mas, btw kalo boleh saran ukuran fontnya di perbesar sedikit mas, biar lebih jelas bacanya
satrya´s last blog… Wp CSS Plugins Untuk Mengkompress CSS
Mas saya menggunakan gravatar editing, atau gravatar yg saya buat sendiri, kemudian saya menambahkan 1 file pada template dgn nama, gravatar.php,.isinya berupa fungsi untuk menambah default gravatar.
Tapi setelah menggunakan .htaccess mas, gravatarnya bermasalah dan tidak muncul. Padahal pada .htaccess sudah saya allow gravatar.php.
ada solusi ?
satrya´s last blog… Tutorial Cara Membuat Sticky Post dan Merubah Stylenya
Maaf sudah ketemu permasalahannya,.
Pada saat upload gambar, button select files Flash uploader-nya nggak jalan mas.
oya? hihihi… ntar aku cek d mas. selama ini selalu pake yg basic uploader, flash uploadernya di blok sama admin kantor
ubah .htaccess untuk folder wp-content jadi seperti ini mas (tambahkan .swf di daftar file yg boleh di akses):
Order Allow,DenyDeny from all
<Files ~ "\.(css|jpe?g|png|gif|js|xml|swf)$">
Allow from all
</Files>
thx berat mas buat inpohnya
Kode Keamanan WordPress yang mantab! Thanks Mas Poer!
JEVUSKA´s last blog… Pasang bendera negara kontestan Piala Dunia 2010 Blackberry
Mas Poer,yang untuk wp-admin gimana dong ?
untuk wp-admin aku membatasi hanya ip tertentu yg bisa masuk mas, pake cara yg ku bahas disini: http://wp.me/p6hKA-3w
Thanks mas poer atas infonya dan tipsnya.
mas poer nanya nich, kok websiteku ga muncul gambarnya ya , sudah saya tambahkan jenis filenya jpg, jpeg tapi tetap juga ga muncul
biasanya muncul ya? kalau .htaccessnya dibuang muncul ga? di kode .htaccess yg diatas itu membolehkan file jp?g kok (jpg,jpeg).
coba kodenya di tulis manual, kalau copas dari blog kadang tanda petik duanya berubah jadi karakter petik dua yg miring itu
Thanks mas poer. Udah dicoba ternyata bisa, masalahnya ada di themenya. kudu ngoprek lg tp belum bs.
. Jadi tidak pake cara .htaccess.
ada tips dari teman, katanya kita bisa memindahkan wp-config.php ke level satu tingkat diatas direktorinya. Apakah benar seperti itu mas?
yup, emang benar mbak, infonya bisa dibaca disini. atau bisa juga dg menambahkan kode berikut ini di dalam file .htaccess yg ada di root folder wp kita:
# PROTECT wp-config.php<files wp-config.php>
Order deny,allow
deny from all
</files>
dg adanya kode itu, yg bisa mengakses file wp-config secara langsung hanyalah WordPress itu sendiri.
mas poer, saya coba tambah kode .htaccess nya seperti diartikel ini malah keluar Notify dari server hosting & ngak bisa masuk /di buka blognya.
Terpaksa di delete lagi.
thanks.
.htaccess-nya udah diletakkan di folder wp-content sama wp-includes pak?
duh MaS Poer binggung nih, TinyMCE Advanced punyaku di WP V.3.0 ko kaga muncul2 ya..? padahal udah install plugin nya. pas aku kasih .htaccess kaya punya mas poer eh malah eror Tinynya? mohon pencerahan Mas maklum anak baru..?
tinymce advanced itu plugin sendiri ya mas, kalau plugin sendiri, aku belum pernah nyoba
Keren bgt neh..
Asik nambah elmu lagi…
Mantap! buat tambah ilmu. Thanks
info yg sangat menarik buat saya pemula.. thanks mas.
Mas, saya ada permasalahan ternyata. Style template tidak terbaca.
Owh ternyata ada bentrok mas, tidak tahu dengan apa.
saya coba dlu mas.. smg gak ada efek samping
WOW… infonya berharga banget buat para bloger pemula seperti saya ini. Mau coba cara diatas. Mudah2an bisa membantu dan gak ada masalah seperti temen2 yang lain.
wah, sepertinya rumit nih mas
Tak ku kira bahayanya bisa segawat ini. Mungkin cara yang digunakan oleh Joomla dapat digunakan. Di dalam Joomla pada setiap file .php selalu diawali dengan pernyataan semacam :
“defined( ‘_JEXEC’ ) or die( ‘Restricted access’ );”.
Pernyataan ini akan mencegah akses ke file secara langsung (tidak melalui file root index.php, biasanya diletakkan di home page).
Kemudian di file root (index.php) kita definisikan constant _JEXEC seperti :
define( ‘_JEXEC’, 1 );
Cara tersebut cukup ampuh untuk mecegah akses langsung ke file library. Namun sayangnya kita harus mengubah satu per satu file .php. Tapi daripada merusak system seperti menggunakan .htaccess, cara ini mungkin dapat dipertimbangkan.