December 16, 2020

340 words 2 mins read

Convert Wordpress to Static for Better Security

Ramai diberitakan beberapa website pemerintah menjadi korban defacing. Beberapa di antara website tersebut menggunakan WordPress. Dari sisi penggunaan, WordPress memang mudah untuk digunakan. Tetapi dengan banyaknya plugin dan themes yang tersedia, maka rawan terdapat plugin atau themes yang vulnerable.

Posting singkat ini hanya memberikan gambaran bagaimana agar kita bisa tetap menggunakan WordPress untuk kemudahan namun dengan tingkat keamanan dan performa yang lebih baik. Caranya dengan membuat WordPress kita menjadi static site.

Ini yang dibutuhkan:

  1. Existing WordPress site.
  2. 1 Server untuk static site. Kalau tidak memungkinkan, bisa menambahkan virtual host pada existing server.
  3. Static generator salah satunya make-static
  4. Apabila ingin tetap memiliki fitur search, bisa menggunakan wp-search

Arsitekturnya akan seperti ini:

Webmaster ------> [WordPress] ---------> [Static Site] -------> Public
         manage     |        converted to        |      accessed by
                    | connect                    | proxied
                    [MySQL] -----------> [Search Engine]
                            accessed by

Perbedaan utama dengan setup normal adalah, webmaster tidak mengakses panel WordPress dari koneksi publik, dan pengunjung tidak mengakses langsung ke WordPress melainkan ke static site hasil konversi.

Berikut beberapa contoh konfigurasi dan script yang dapat digunakan.

Crawling Script

## CRAWL
/usr/local/bin/make-static -t 60 -d 33 https://subdomain.original.site -o /var/html/static/ 

## REPLACE STRING - contoh script untuk mengubah url apabila hasilnya tidak sesuai / not found / broken link
find /var/html/static/subdomain.original.site/ -name '*.html' -exec sed -i 's/subdomain//g' {} \;
find /var/html/static/subdomain.original.site/category/ -name '*.html' -exec sed -i 's/index.html/\/index.html/g' {} \;

## SYNC OTHER RESOURCES - sinkronisasi asset yang tidak tercopy oleh crawler
rsync -avz  -e 'ssh' /var/html/original/wp-content/vendors/* /var/html/static/subdomain.original.site/wp-content/vendors/ --delete
rsync -avz  -e 'ssh' /var/html/original/wp-content/uploads/* /var/html/static/subdomain.original.site/wp-content/uploads/ --delete
rsync -avz  -e 'ssh' /var/html/original/wp-content/themes/theme-name/* /var/html/static/subdomain.original.site/wp-content/themes/theme-name/ --delete

## SYNC TO STATIC SERVER - apabila beda server. Kalau dalam satu server tidak perlu ssh
rsync -avz  -e 'ssh' /var/html/static/subdomain.original.site/* root@ip-server-static:/var/html/static/subdomain.original.site/ --delete 
rsync -avz  -e 'ssh' /var/html/static/subdomain.original.site/wp-includes/js/* root@ip-server-static:/var/html/static/subdomain.original.site/wp-includes/js/ --delete

Agar dapat berjalan normal, gunakan setting permalink /%postname%.html Hasil akhirnya sangat tergantung pada kompleksitas themes dan plugin yang anda gunakan saat ini.

Pada server origin

./wp-search

Pada server static

Untuk konfigurasi reverse proxy fitur search pada server static, dapat menggunakan nginx config seperti ini:

        location / {
               if ($arg_s) {
                        proxy_pass http://ip-server-origin:10000/search?s=$arg_s;
                }
comments powered by Disqus