404 Not Not Found

Seberapa besar traffic website dan blog anda yang redirect ke 404 not found?. Apakah anda merasa itu hal yang wajar karena pengunjung anda salah ketik web address atau link building yang ngawur? pikir lagi, karena bisa jadi missing link bukan karena tidak sengaja tapi memang di sengaja. Perhatikan missing link hasil screenshot blog saya ini :

Teliti 404 link anda

klik untuk memperjelas

Jika anda teliti link-link yang dimasukkan sangat janggal dan banyak juga yang berakhiran .php. Maka bisa dipastikan link yang dimasukkan ke web address adalah disengaja, baik oleh manusia ataupun oleh bot.

Jika disengaja maka bisa dipastikan pengunjung website anda punya tujuan lain yang tidak semestinya, bisa jadi ada usaha cracking dan hijacking ke website anda (sangat umum di internet, khususnya di indonesia). Dan blog saya ini pun pernah sekali ke hijack, walaupun hanya sekedar reset admin password yang tidak berbahaya dan mudah ditanggani.

Sekarang saatnya anda periksa redirect 404 blog pribadi saudara sendiri, dan selamat berhari minggu

Ah… Akhirnya, Menutup Celah Keamanan WordPress 2.8

Jadi setelah ada acara hacking hackingan reset password ampe dua kali dari orang gak dikenal seperti yang saya bilang di twitter tadi, maka saya akan mempublikasikan bagaimana menanggulangi masalah ini *halah… kayak press release di mana gitu… he5x…. :P *

Begini ceritanya :)

Pertama : Cara paling gampang, update saja ke 2.8.4 ha5x…. *Gedubrak simpel banget yah :P *

Kedua : Mari kita lihat How the Machine Works, halah….

  1. pertama dia akan meminta reset password dengan memasukkan username admin atau emailmu, di area /wp-login.php?action=lostpassword
  2. kedua kemudian email si admin akan terkirimi email yang isinya bla… bla… gitu deh, pokoknya follow this link untuk reset password website anda atau semacamnya. Tapi inilah celahnya, anda tidak dikirimi notifikasi peresetan passwor dan tentunya anda juga tidak mengklik link yang dikasih.
  3. Coding PHP, lihat di wp-login.php
    coba di cek yang ini :

    line 186:

    function reset_password($key) {
    global $wpdb;

    $key = preg_replace('/[^a-z0-9]/i', '', $key);

    if ( empty( $key ) )
    return new WP_Error('invalid_key', __('Invalid key'));

    $user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE
    user_activation_key = %s", $key));
    if ( empty( $user ) )
    return new WP_Error('invalid_key', __('Invalid key'));
    ...[ganti baris yah ]....
    line 276:
    $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
    $errors = new WP_Error();

    if ( isset($_GET['key']) )
    $action = 'resetpass';

    // validate action so as to default to the login screen
    if ( !in_array($action, array('logout', 'lostpassword', 'retrievepassword',
    'resetpass', 'rp', 'register', 'login')) && false ===
    has_filter('login_form_' . $action) )
    $action = 'login';

    ...[ganti baris lagi]....

    line 370:

    break;

    case 'resetpass' :
    case 'rp' :
    $errors = reset_password($_GET['key']);

    if ( ! is_wp_error($errors) ) {
    wp_redirect('wp-login.php?checkemail=newpass');
    exit();
    }

    wp_redirect('wp-login.php?action=lostpassword&error=invalidkey');
    exit();

    break;

  4. Jadi intinya dia akan memasukkan array atau “tanda sama dengan” ke variabel $key  * Ini bener apa gak sih? kalo gak yo disepuro waelah, namanya juga usaha menulis yang baik dan benar :P . * Pokoknya dia akan memasukkan alamat ini ke websitemu : http://websitemu.com/wp-login.php?action=rp&key[]=
  5. Gotcha ! Website worpress anda telah di reset passwornya
  6. Pencegahannya. Buka dan edit file wp-login.php (bisa pakai text wrangler seperti saya atau text editor kesayangan anda) lihat code baris 190 pada code berikut :
    if (empty($key))
  7. Ganti dengan kode ini :
    if(empty($key) || is_array($key))
  8. Beres…..

Peringatan : Sebenarnya saya gak paham kode2 di atas, cuman hasil lihat2 aja di web security he5x… namanya juga usaha, kalo gak berusaha mana bisa pinter, tul gak :P