Optimalisasi pengamanan web hosting yang berbasis Wordpress

Terdapat beberapa konsep yang penting untuk diperhatikan dalam mengoptimalkan pengamanan webhosting yang dipergunakan untuk website kantor yaitu :

  • Jangan perbolehkan seluruh direktori atau seluruh file dapat ditulis oleh script (php, asp, perl, rb dsb), biasakan untuk menggunakan permission untuk menulis file yang seperlunya saja.

Misalkan direktori ./cache/ yang akan kita gunakan sebagai tempat penyimpanan file sementara. Maka hanya perbolehkan proses penulisan pada direktori itu saja, tidak pada direktori yang lain pada server hosting.

  • Jangan perbolehkan server side script (php, asp, perl, rb, dsb) yang tidak dikenali dapat running/berjalan pada server hosting.

Misalkan file index.php hanya terdapat pada root direktori, kemudian tiba-tiba terdapat file index.php pada direktori ./assets/ yang merupakan file shellcode. Konfigurasi pengamanan file hosting seharusnya dapat melakukan blokir terhadap file index.php pada direktori ./assets/ tersebut.

 

Berdasarkan kosep tersebut kita dapat menggunakan fungsi .htaccess dan bantuan script berikut ini:

  1. Tambahkan file .htaccess pada root direktori web hosting, lalu paste code berikut ini pada file .htaccess tersebut :
    #http to https
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
    
    # REWRITE ALL FAVICON
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/favicon\.png$ [NC]
    RewriteCond %{HTTP_HOST} (.+)
    RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/favicon.png [R=301,L,NC]
    </IfModule>
    
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    # exclude all registered .php from rewriting.
    RewriteRule ^(wp-activate|wp-blog-header|wp-comments-post|wp-cron|wp-links-opml|wp-load|wp-login|wp-mail|wp-settings|wp-signup|wp-trackback|xmlrpc|upgrade|update|zeno|z3n0|SQLyogTunnel)\.php$ - [L]
    RewriteRule (wp-admin|plugins|mahkamahagung)\/(.*)\.php$ - [L]
    # exclude all .php in folder
    # rewrite all extension to 404
    RewriteCond %{REQUEST_URI}  !(wp-admin|plugins|mahkamahagung)\/(.*)\.php$ [NC]
    RewriteRule ^(.*)\.(html|htm|asp|txt|php)$ /404 [R,L]
    # rewrite any request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # BEGIN WordPress
    # The directives (lines) between "BEGIN WordPress" and "END WordPress" are
    # dynamically generated, and should only be modified via WordPress filters.
    # Any changes to the directives between these markers will be overwritten.
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # END WordPress
    
    DirectoryIndex index.php
    
    <FilesMatch "\.html$">
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
    
    <FilesMatch "\.htm$">
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
    
    <FilesMatch "\.php$">
        Order Allow,Deny
        Deny from all
    Allow from 127.0.0.1
    </FilesMatch>
    
    <Files index.php>
        Order Allow,Deny
        Allow from all
    </Files>
    
    <FilesMatch "(dbtunneling|SQLyogTunnel|z3n0|zeno|wp-activate|wp-blog-header|wp-comments-post|wp-cron|wp-links-opml|wp-load|wp-login|wp-mail|wp-settings|wp-signup|wp-trackback|xmlrpc|upgrade|update)\.php$">
        Order Allow,Deny
        Allow from all
    </FilesMatch>
    
    <If "%{REQUEST_URI} =~ m#^/(wp-admin|plugins|mahkamahagung)/.*\.(php)#">
        Order Allow,Deny
        Allow from all
    </If>
  2. Buat 1 file zeno.php pada root direktori web hosting, lalu paste code berikut ini pada file zeno.php tersebut :
    <?php
    exec("chmod -R 555 ./");
    exec("chmod 755 zeno.php");
    exec("chmod 755 .htaccess");
    exec("chmod -R 755 .well-known");
    exec("chmod -R 755 ./wp-content/uploads/");
    exec("chmod -R 755 ./wp-content/themes/mahkamahagung/plugins/mari-jadwal-sidang/cache/");
    exec("chmod -R 755 ./wp-content/themes/mahkamahagung/plugins/mari-jadwal-sidang-banding/cache/");
    exec("chmod -R 755 ./wp-content/themes/mahkamahagung/plugins/mari-sippbanding/cache/");
    exec("chmod -R 755 ./wp-content/themes/mahkamahagung/plugins/mari-sippma/cache/");
    exec("chmod -R 755 ./wp-content/plugins/sipphealth/cache/");
    exec("find . -name .htaccess | xargs chmod 444");
    echo "done :)";
    ?>
  3. Akses file zeno.php tersebut melalui browser untuk melakukan penerapan ownership file-file pada hosting. Misalkan pada alamat http://serverku.com/zeno.php
  4. Dengan diterapkan ny ownership terhadap file-file pada hosting, harapannya file dan direktori tidak mudah ditulis oleh pengguna dari luar maupun pemilik sehingga meminimalisir terjadinya peretasan.

 

 

Rincian Artikel

ID Artikel:
6
Penilaian :

Artikel terkait