Check List Keamanan di Instalasi WordPress Anda

Survei dan fakta membuktikan jika WordPress adalah CMS terpopuler di jagad internet. Dari mulai blog curhat hingga toko online lengkap dengan keranjang belanja dan checkout menggunakan paypal, WordPress layak dinobatkan sebagai CMS serbaguna. Antar muka WordPress yang sederhana mendorong penggunanya untuk produktif.

Untuk developer, fungsi-fungsi wordpress terdokumentasi dengan lengkap. Semuanya ada di http://codex.wordpress.org. Nggak semua sih, kadang-kadang ada yang nggak ada, tapi jangan kuatir. Masih ada forum. Apapun masalah anda, pasti ada orang lain yang senasib. Dan jika masih stuck, Google bersedia membantu. Ask and I shall answer, said Google to people who need answers and… light porns.

Tapi sisi gelap ketenaran selalu ada dan biasanya tidak menyenangkan. WordPress adalah pesohor di dunia CMS. Seperti juga pesohor, banyak pihak yang mencarinya. Ada yang memuji, namun ada pula yang melucuti.

Jika anda menggunakan wordpress, prinsip saya adalah: “Better safe than sorry”. Jadi memperhatikan detail-detail kecil sangat dibutuhkan.

Random String/ Salt

Sebelum menginstall WordPress
Buka wp-config.php. Setelah mengatur database lihat baris yang berisi tulisan:

define('AUTH_KEY',         '');
define('SECURE_AUTH_KEY',  '');
define('LOGGED_IN_KEY',    '');
define('NONCE_KEY',        '');
define('AUTH_SALT',        '');
define('SECURE_AUTH_SALT', '');
define('LOGGED_IN_SALT',   '');
define('NONCE_SALT',       '');

Baris tersebut harus diisi dengan karakter-karakter rumit, unik dan membingungkan. Anda bisa men-generate random string tadi dengan mengunjungi https://api.wordpress.org/secret-key/1.1/salt/. Setelah itu keluar seperti ini:

define('AUTH_KEY',         'G6bW8_C`~RI9C~0|RGB@,g(Z@G`qMNgB2L=@)gJ2?q9~[o>rDb(-)S(<G0pElwwg');
define('SECURE_AUTH_KEY',  'j2#SbrD-s*cVBr9tHldc7;^fI<eQR`xpc|{@%-Kx./j4+X#bcw<5#fr!An9>OI3E');
define('LOGGED_IN_KEY',    '3I4-pL7B{2u|1!QvGgEZ.G6-Z$&4M6&L+K`z=C2M%84tMPc-|{M!Or{^|s48|/qv');
define('NONCE_KEY',        'K~nY+x)7+M-!YgP<j;YtO3c%NG76? %VK$|^q,kA<Ct/<U0E{,J`+0<B1R% ZebB'); 
define('AUTH_SALT',        '-ED5@`4JW/jV},fJu`+^/y&nBCP%M5/..>$qb-AH-X#Z2E_hR CHlTurk)~h5zC$');
define('SECURE_AUTH_SALT', '}tk!8-%5Nj,KsXh$19{|smh;#4*q] Z8+$TbD^,)ehkk6TbfFnor$xD r%:okqho');
define('LOGGED_IN_SALT',   '9=yJZ9on|XFz`;AS^TIH+Q7ZBtp!>nTT<+S,L_Bw7|G7H)-6 N7=|jv2WG,_ASB[');
define('NONCE_SALT',       '=mb}Sa*R8:y$%LnE4rOK[j:Tq^4NTdtg)T}PN?sq6jw@ZxR$=7w:5u_9F2 W2lL<');

Kopi paste kode tadi ke wp-config.php (jangan mengkopi kode diatas, anda harus men-generate sendiri).

Table Prefix

Masih di wp-config.php. Setelah selesai dengan random string tadi, cari $table_prefix = 'wp_';. Ubahlah menjadi selain wp_. Misalnya nm_ atau bji_ seperti ini $table_prefix = 'bji_';. Merubah prefix membuat database anda tidak mudah ditebak oleh penyusup.

Admin Username dan Password

Mulailah menginstall WordPress. Setelah itu anda akan diberi form untuk membuat username untuk administrator. Jangan beri nama admin, administrator, _admin_, Admin, dan/ atau yang berhubungan dengan admin. Pilihlah nama-nama yang asoi seperti rumpelstiltskin, eyjafjallajokull, pteranodon, ijiberngenstiau, ik3tunid4lak dan sejenisnya.

Kemudian password jangan tanggal lahir, 123456, kata password itu sendiri, nama pacar, nama ayah, nama ibu, nama presiden kita, nama pengisi suara Nobita, dsb. Intinya jangan nama-nama generik yang mudah ditebak.

Untuk password yang baik sebaiknya tanya teman-teman alay anda. Keahlian mereka mengkombinasikan huruf besar, huruf kecil, angka, dan karakter unik lainnya membuat mereka sangat ahli membuat password yang aman.

Menghilangkan Generator Versi WordPress di Source HTML

Di folder template anda, /wp-content/themes/nama_template, bukalah file functions.php. Masukkan kode berikut ini di baris terakhir.

function rm_generator_filter() {
return '';
}
add_filter('the_generator', 'rm_generator_filter');

Kode ini akan menghilangkan tag di source kode HTML dan feed RSS anda seperti ini <meta name="generator" content="WordPress 3.1.1"/>. Menampilkan versi wordpress memudahkan penyusup menebak sistem atau kelemahan yang terdapat pada versi tersebut.

Timthumb

Jika anda menggunakan timthumb (script resizer gambar on the fly), segeralah update ke versi terbaru di sini http://timthumb.googlecode.com/svn/trunk/timthumb.php.

Update WordPress dan Plugin

Update wordpress dan plugin jika terdapat versi terbaru. Update biasanya memperbaiki lubang-lubang keamanan.

Readme.html

Terakhir jangan lupa hapus readme.html. Disitu isinya jelas-jelas ada versi wordpressnya.

Sementara langkah-langkah diatas adalah langkah awal yang wajib dilakukan, sebetulnya masih banyak lagi, check list security yang bisa kita lakukan untuk lebih memperkuat wordpress dari serangan. Like I said before, “Better safe than sorry”.

Iklan

Using definition list to Generate WordPress Pages

To generate wordpress page, normally we use:

<?php wp_list_pages(); ?>

But that code also automatically generate <li>. What if you want to use definition list to generate wordpress page like this?

<dl class="nice vertical tabs">
  <dd><a href="#">Ekonomi</a></dd>
  <dd><a href="#">Politik</a></dd>
  <dd><a href="#">Korupsi</a></dd>
  <dd><a href="#">Sports</a></dd>
  <dd><a href="#">Nasional</a></dd>
  <dd><a href="#">Hiburan</a></dd>
  <dd><a href="#">Megapolitan</a></dd>
  <dd><a href="#">Internasional</a></dd>
  <dd><a href="#">Teknologi</a></dd>
  <dd><a href="#">Kesehatan</a></dd>
  <dd><a href="#">Wisata</a></dd>
  <dd><a href="#">Syiar</a></dd>
  <dd><a href="#">Renungan</a></dd>
  <dd><a href="#">Kopi Tumpah</a></dd>
  <dd><a href="#">Terbit Foto</a></dd>
</dl>

Easy, use get_pages and loop it. Like this:

<dl>
 <?php 
  $pgs = get_pages();
  foreach ($pgs as $pg) {
     $title = $pg->post_title;
     $link = get_page_link($pg->ID);
  ?>
  <dd><a href="<?php echo $link ?>"><?php echo $title ?></a></dd>
<?php } ?>
</dl>

I recently use foundation framework and the code proved to be quite useful with foundation’s vertical tab.

Further Reading:

Trik Sederhana Upload WordPress dari Localhost ke Live Site

Setelah puas mendisain template wordpress lengkap dengan content lorem ipsum dan foto-fotonya, anda pasti ingin menguploadnya ke domain anda sendiri kan? Seperti biasa, kalau contentnya masih sedikit, anda bisa mengekspor isi content berita anda via XML (Tools –> Export) kemudian di import di domain anda (yang telah diinstall wordpress tentunya) via Tools —> Import —> WordPress.

Tapi bagaimana dengan gambar-gambar dan media lain yang sudah diupload di localhost? Pasti tidak akan terupload kan? Dan seandainya pun anda menguploadnya di domain anda, pasti gambar tidak akan keluar karena di file XML tadi referensi file gambar-gambar anda adalah di localhost.

Baca lebih lanjut

Script Tried to Increase memory_limit

Maaf bukan maksudnya mau membajak artikel tanpa izin, tapi saya cuma pakai untuk catatan pribadi aja, karena saya menemukan masalah yang sama.

Artikel ini diambil di: http://blog.kotakmimpi.net/2010/07/script-tried-to-increase-memory_limit/

Terima Kasih Artikelnya membantu banget….

————

Cukup lama saya menikmati error pada halaman admin wordpress. Dimulai ketika menggunakan WordPress 2.9 sampai saat ini wordpress 3.0. Pada saat menggunakan Wp 2.9 munculnya error tidak terlalu signifikan. Hanya muncul ketika melakukan upload file. Namun ketika migrasi ke Wp 3.0, error ini muncul hampir setiap halaman admin.

ALERT – script tried to increase memory_limit to 268435456 bytes which is above the allowed value (attacker ’202.70.****’, file ‘/*****/blog.kotakmimpi.net/www/wp-admin/admin.php’, line 96) ….. Ini pesan error yang selalu muncul. Server mendeteksi adanya serangan?

Setelah akhirnya bosan dengan pesan error ini. Saya coba kontak ke technical support hosting server untuk membantu penyelesaian. Dan sukses mendapatkan jawaban, pesan error tsb muncul dikarenakan script admin.php sesuai pesan error yang muncul mengoverride memory menjadi sekitar 268 MB, dikarenakan fitur suhosin pada server aktif maka muncul error tersebut. Salah satu cara utk mengatasi hal ini anda bisa coba rubah line 96 sesuai error yang dimaksud

dari

1
@ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', '256M' ) );

menjadi

1
@ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', '32M' ) );

Atau alternatif lain anda bisa nonaktifkan fitur suhosin melalui spanel di menu *kelola subdomain* > *setting* > *aktifkan suhosin* > *anda set menjadi tidak*

Saya mengambil pilihan alternatif, dengan menonaktifkan fitur suhosin, dan masalah pun selesai.

Moving Your WordPress Powered Site with WP Super Cache Installed

Ah, kedengarannya simple. Tapi tidak semudah itu. Kita semua tahu WP Super cache menyimpan hasil olahan php ke dalam file atau disebut cache. Jadi tamu-tamu yang mengunjungi kita membaca cache bukan menyuruh PHP merender ulang ke HTML, jadi pemakaian CPU dan memori lebih irit.

Nah tapi ketika memindahkan (migrasi) dari server A ke server B ada beberapa check list yang perlu diingat.

  1. Hapus advanced-cache.php dan wp-cache-config.php dari /wp-content/ tenang saja nanti Wp-super-cache akan men-generate yang baru. Kedua file tersebut dihapus dan digenerate yang baru supaya referensi directorynya terupdate.
  2. Pastikan .htaccess di root directory sudah sesuai dengan referensi directory yang baru, jika belum, bisa di generate secara otomatis oleh WP-super-cache atau mengkopi pastenya secara manual melalui ftp atau mekanisme peletakan file lainnya.
  3. Setelah semua selesai, pastikan untuk mengembalikan file permission seperti sedia kala supaya aman.

Okay, all set, cache nya akan kembali berfungsi seperti sedia kala. Asoi kan? Kalo nggak tahu maksud tulisan ini ya tidak apa-apa, saya biasanya menulis untuk diri sendiri sebagai pengingat saja.