Pengamanan WordPress Tanpa Plugin - MSP OpenCourseWare

Logo PT Mitra Solusindo Pratama, PT MSP Bandung

Logo PT Mitra Solusindo Pratama, PT MSP Bandung PT Mitra Solusindo Pratama, PT MSP
Baca »

Pengamanan WordPress Tanpa Plugin - MSP OpenCourseWare

Course OpenCourseWare MSP ini membahas hardening/pengamanan WordPress langsung pada web server menggunakan .htaccess untuk Apache dan LiteSpeed Enterprise, serta konfigurasi setara untuk Nginx. Materi disusun agar pengelola website mampu mengurangi permukaan serangan, melindungi file sensitif, mencegah eksekusi PHP pada folder uploads, mengendalikan XML-RPC, menambahkan header keamanan, menguji perubahan, dan melakukan rollback. Pendekatan ini ringan karena banyak permintaan berbahaya dapat dihentikan sebelum WordPress dan PHP bekerja; plugin keamanan tetap dapat dipakai secara opsional untuk kebutuhan yang belum ditangani oleh server.
Hardening WordPress tanpa plugin keamanan berat menggunakan .htaccess Apache, LiteSpeed Enterprise, dan konfigurasi Nginx.
Hentikan permintaan yang tidak diperlukan sedekat mungkin dengan web server, lalu buktikan hasilnya melalui pengujian.

OpenCourseWare MSP · OCW-MSP-SEO-015

Hardening WordPress pada lapisan web server dapat menutup jalur yang tidak diperlukan sebelum permintaan masuk ke WordPress dan PHP. Hasilnya ringan, cepat, dan tidak bergantung pada plugin keamanan yang besar. Namun, konfigurasi harus dipilih berdasarkan jenis web server, diuji pada staging, dipantau, serta dilengkapi update, autentikasi kuat, backup, dan pemulihan.

Hardening WordPress Tanpa Plugin: Apache, LiteSpeed, dan Nginx

Course ini merupakan materi lanjutan dari Keamanan Website · OCW MSP. Fokusnya adalah menerapkan kontrol teknis yang sederhana, terukur, dan dapat dibatalkan pada Apache 2.4, LiteSpeed Enterprise, serta Nginx.

Pembelajar tidak hanya mendapat skrip siap adaptasi. Setiap aturan dijelaskan tujuannya, batasannya, risiko salah konfigurasi, cara menguji, dan kondisi ketika aturan tersebut sebaiknya tidak digunakan.

PenyelenggaraHilfan Soeltansyah (PT. Mitra Solusindo Pratama)
FormatOpenCourseWare, belajar mandiri
SertifikatTidak disediakan
TingkatPemula–Menengah
BahasaBahasa Indonesia
Ritme belajar4 minggu · sekitar 12 jam

Course Overview

WordPress menerima permintaan dari internet melalui web server. Jika web server dapat menolak permintaan yang jelas tidak diperlukan—misalnya akses langsung ke file konfigurasi atau percobaan menjalankan PHP dari folder unggahan—maka permintaan tersebut berhenti sebelum WordPress, tema, plugin, dan PHP memprosesnya. Inilah alasan hardening di lapisan server umumnya lebih ringan daripada memeriksa seluruh permintaan setelah aplikasi dimuat.

Ringan tidak berarti otomatis aman. Satu aturan yang terlalu luas dapat memutus login, editor, REST API, unggahan media, integrasi, Jetpack, aplikasi seluler, atau fungsi Multisite. Karena itu, course ini memakai prinsip: identifikasi server → pilih aturan → cadangkan → uji di staging → terapkan → verifikasi → pantau → siapkan rollback.

Prinsip utama: hardening adalah pengurangan risiko, bukan jaminan bahwa website tidak dapat diretas. Konfigurasi server menutup sebagian jalur serangan, tetapi tidak memperbaiki plugin rentan, password lemah, komputer admin yang terinfeksi, backup yang tidak dapat dipulihkan, atau kode aplikasi yang tidak aman.

Apa yang dilindungi?

Permukaan serangan

Directory listing dimatikan, file sensitif tidak dapat diambil langsung, dan jalur eksekusi yang tidak diperlukan ditutup.

Sumber daya server

Permintaan tertentu ditolak sebelum WordPress dan PHP bekerja sehingga beban aplikasi dapat berkurang.

Browser pengguna

Header keamanan memberi instruksi tambahan kepada browser untuk membatasi framing, penebakan tipe konten, referrer, dan fitur perangkat.

Perubahan operasional

Backup, pengujian, log, pemilik perubahan, dan rollback membuat hardening dapat dikelola serta dibuktikan.

Kenali web server sebelum menyalin skrip

Tabel dapat digeser ke kanan atau kiri pada perangkat seluler.

LingkunganTempat konfigurasiApakah .htaccess dibaca?Catatan
Apache 2.4File .htaccess pada document root atau konfigurasi virtual host.Ya, jika hosting mengizinkan directive terkait melalui AllowOverride.Gunakan sintaks modern Require all denied. Directive lama hanya menjadi fallback kompatibilitas.
LiteSpeed Enterprise.htaccess pada document root dalam mode kompatibel Apache.Umumnya ya.Tetap uji karena tidak semua directive atau modul Apache didukung dengan cara yang sama.
OpenLiteSpeedWebAdmin Console atau konfigurasi virtual host/rewrite OpenLiteSpeed.Tidak otomatis.OpenLiteSpeed memahami banyak sintaks rewrite Apache, tetapi bukan pengganti langsung mekanisme .htaccess Apache.
NginxBlok http dan server pada konfigurasi Nginx.Tidak.Perubahan memerlukan akses administrator atau bantuan penyedia hosting, lalu wajib diuji dengan nginx -t.
Tidak diketahuiPanel hosting atau bantuan penyedia hosting.Jangan menebak.Periksa informasi server, dokumentasi hosting, atau tanyakan dukungan teknis sebelum menerapkan aturan.

Mengapa skrip lama perlu diperbarui?

Banyak skrip keamanan WordPress beredar bertahun-tahun dan tampak meyakinkan, tetapi beberapa bagiannya sudah usang, terlalu luas, mudah dilewati, atau berpotensi memblokir pengguna yang sah. Tabel berikut menjelaskan pembaruan yang dipakai dalam course ini.

Aturan lamaMasalahPendekatan course ini
Order Allow,Deny dan Deny from allDirective kompatibilitas lama sudah deprecated pada Apache 2.4.Utamakan Require all denied; sediakan cabang lama hanya bila lingkungan benar-benar memerlukannya.
Memblokir seluruh PHP di wp-includesDapat memutus file inti tertentu dan bermasalah pada WordPress Multisite.Gunakan aturan include-only resmi WordPress dan tandai pengecualian Multisite.
Daftar panjang nama User-Agent botUser-Agent dapat dipalsukan dan nama yang diblokir dapat dipakai klien yang sah.Gunakan rate limiting, WAF, log, dan pemblokiran sementara berbasis perilaku.
Regex query string sebagai “pencegah semua XSS dan injeksi”Mudah menimbulkan false positive dan tidak memperbaiki celah pada kode.Utamakan update, validasi input, output encoding, prepared statement, CSP teruji, dan WAF yang dipelihara.
X-XSS-Protection: 1; mode=blockHeader lama ini tidak lagi menjadi kontrol yang dianjurkan dan pada kondisi tertentu dapat menambah risiko.Hilangkan nilai lama atau set X-XSS-Protection: 0; rancang CSP secara bertahap jika dibutuhkan.
Selalu memblokir xmlrpc.phpDapat memutus Jetpack, aplikasi seluler, remote publishing, atau integrasi yang masih menggunakannya.Blokir hanya bila tidak dipakai; jika dipakai, batasi dan rate-limit.
Peringatan: jangan menempel seluruh konfigurasi langsung ke production. Directive yang tidak diizinkan hosting dapat memunculkan 500 Internal Server Error. Aturan Nginx pada blok yang salah dapat membuat konfigurasi gagal dimuat. Selalu simpan salinan sebelumnya dan pastikan Anda mempunyai cara memulihkan file tanpa mengandalkan halaman WordPress.

Capaian Pembelajaran

Setelah menyelesaikan course ini, pembelajar diharapkan mampu:

  • Menjelaskan manfaat dan batas hardening WordPress pada lapisan web server.
  • Membedakan Apache, LiteSpeed Enterprise, OpenLiteSpeed, dan Nginx.
  • Menentukan tempat konfigurasi yang benar sebelum membuat perubahan.
  • Membuat backup konfigurasi dan rencana rollback yang dapat dijalankan.
  • Memasang baseline .htaccess untuk Apache 2.4 dan LiteSpeed Enterprise.
  • Melindungi file sensitif dan mencegah eksekusi PHP dari folder uploads.
  • Menentukan apakah XML-RPC perlu diblokir atau dipertahankan.
  • Memasang header keamanan dasar tanpa mengaktifkan CSP atau HSTS secara gegabah.
  • Mengadaptasi kontrol yang sama pada konfigurasi Nginx.
  • Menerapkan rate limiting login dan XML-RPC pada Nginx bila diperlukan.
  • Menguji fungsi normal, penolakan, header, log, dan rollback.
  • Menentukan kapan plugin keamanan benar-benar memberi nilai tambahan.

Prasyarat dan perlengkapan

  • Mengelola website WordPress milik sendiri atau memiliki izin tertulis untuk mengubahnya.
  • Memiliki akses File Manager, SFTP, SSH, panel hosting, atau bantuan administrator server.
  • Memahami perbedaan sederhana antara staging dan production.
  • Mempunyai backup file dan database yang dapat dipulihkan.
  • Mengetahui integrasi yang dipakai, termasuk Jetpack, aplikasi seluler, SSO, REST API, webhook, dan WordPress Multisite.
  • Menyiapkan cara uji dari browser incognito dan terminal dengan curl.
  • Tidak wajib menjadi programmer, tetapi perubahan Nginx sebaiknya didampingi administrator server.

Syllabus

Syllabus terdiri atas delapan lecture dalam empat minggu. Setiap lecture menghasilkan bukti yang digabungkan menjadi Paket Hardening WordPress pada capstone.

Tabel dapat digeser ke kanan atau kiri pada perangkat seluler.

MingguLectureFokusAktivitasOutput
11. Fondasi hardeningLapisan keamanan, batas kontrol, dan identifikasi server.Membuat inventaris lingkungan dan ketergantungan.Server and Dependency Inventory.
12. Perubahan amanBackup, staging, change record, pengujian, dan rollback.Menyusun rencana perubahan.Hardening Change Plan.
23. Baseline .htaccessDirectory listing, file sensitif, uploads, wp-includes, dan header.Menerapkan aturan pada staging.Baseline Apache/LiteSpeed dan bukti uji.
24. Kontrol kondisionalXML-RPC, wp-login, Multisite, bot, injeksi, CSP, dan HSTS.Membuat keputusan per kontrol.Control Decision Register.
35. WordPress dan filesystemFile editor, permission, ownership, update, akun, dan 2FA.Memeriksa kontrol di luar web server.WordPress Hardening Checklist.
36. Baseline NginxBlok server, location, header, real IP, dan rate limiting.Mengadaptasi konfigurasi Nginx.Nginx Security Include dan hasil nginx -t.
47. Verifikasi dan operasiTest fungsi, test penolakan, log, monitoring, dan rollback drill.Menjalankan test matrix.Verification and Rollback Report.
48. Plugin sebagai pilihanGap analysis, MFA, audit, scanning, WAF, dan beban operasional.Menilai kebutuhan plugin berdasarkan bukti.Security Coverage Matrix.

Required Reading

Bacaan berikut berasal dari dokumentasi resmi WordPress, Apache HTTP Server, Nginx, LiteSpeed, dan OWASP. Periksa kembali dokumentasi saat menerapkan karena versi server dan kemampuan hosting dapat berubah.

WordPress dan pengendalian brute force

  1. WordPress Developer Resources · Hardening WordPressRujukan utama untuk update, permission, wp-includes, wp-config.php, file editor, backup, log, dan monitoring.
  2. WordPress Developer Resources · Brute Force AttacksRujukan terkini untuk password, 2FA, passkey, XML-RPC, rate limiting, WAF, serta contoh Apache dan Nginx.
  3. WordPress Developer Resources · xmlrpc_enabledMenjelaskan bahwa filter bernama xmlrpc_enabled tidak menonaktifkan seluruh fungsi XML-RPC dan tidak mengendalikan semua metode.

Web server dan header keamanan

  1. Apache HTTP Server 2.4 · Access ControlMenjelaskan directive Require, deprecation directive lama, serta kelemahan pemblokiran berbasis User-Agent.
  2. Apache HTTP Server 2.4 · mod_headersRujukan untuk Header always set, respons error, dan risiko header ganda.
  3. Nginx · HTTP Core ModuleRujukan untuk pemilihan blok location, urutan regular expression, dan try_files.
  4. Nginx · Request Limiting ModuleMenjelaskan zona rate limiting, burst, dry run, status, dan key alamat klien.
  5. LiteSpeed Documentation · Web Server EditionsMenjelaskan perbedaan penting bahwa LiteSpeed Enterprise membaca konfigurasi Apache termasuk .htaccess, sedangkan OpenLiteSpeed tidak otomatis melakukannya.
  6. OWASP Cheat Sheet Series · HTTP Security Response HeadersRujukan untuk X-Frame-Options, X-Content-Type-Options, Referrer-Policy, X-XSS-Protection, HSTS, CSP, dan Permissions-Policy.

Lecture Summaries

Lecture 01

Memahami hardening dan mengenali lingkungan

Hardening berarti mengurangi jalur masuk, membatasi kemampuan yang tidak diperlukan, menahan dampak jika satu lapisan gagal, dan menyiapkan pemulihan. Pada WordPress, hardening bukan satu skrip, melainkan gabungan kontrol pada akun, aplikasi, web server, sistem operasi, database, jaringan, CDN atau WAF, log, dan backup.

Empat pertanyaan sebelum membuat perubahan

  1. Server apa yang melayani website? Apache, LiteSpeed Enterprise, OpenLiteSpeed, Nginx, atau reverse proxy di depan server lain?
  2. Siapa yang berwenang mengubah konfigurasi? Pengelola website, penyedia hosting, administrator server, atau vendor?
  3. Fungsi apa yang harus tetap berjalan? Login, admin-ajax, REST API, cron, media, Jetpack, aplikasi seluler, SSO, webhook, dan Multisite.
  4. Bagaimana memulihkan layanan? Salinan file, akses SFTP atau SSH, backup database, kontak hosting, dan batas waktu rollback.

Inventaris minimum

Domain: Lingkungan: staging / production Web server dan versi: Panel hosting: Versi WordPress: Versi PHP: CDN / reverse proxy / WAF: Jenis instalasi: single-site / Multisite Integrasi yang memakai XML-RPC: Integrasi yang memakai REST API: Lokasi document root: Lokasi konfigurasi: Pemilik perubahan: Cara rollback: Waktu pemantauan setelah perubahan:

Pertanyaan refleksi: jika website tiba-tiba menampilkan error 500 setelah Anda menyimpan konfigurasi, apakah Anda masih mempunyai jalur masuk untuk mengembalikan file sebelumnya?

Lecture 02

Menyiapkan perubahan yang aman dan dapat dibatalkan

Konfigurasi keamanan adalah perubahan layanan. Karena itu, keberhasilan tidak cukup dinilai dari “website masih terbuka”. Perubahan harus mempunyai kondisi awal, tujuan, owner, rencana pengujian, waktu penerapan, tanda kegagalan, dan langkah rollback.

Urutan penerapan

① Inventaris server dan ketergantungan ↓ ② Backup file konfigurasi dan database ↓ ③ Terapkan satu kelompok aturan pada staging ↓ ④ Uji fungsi normal dan permintaan yang harus ditolak ↓ ⑤ Review log dan header ↓ ⑥ Setujui perubahan ↓ ⑦ Terapkan pada production saat traffic rendah ↓ ⑧ Uji ulang, pantau, dan rollback bila kriteria gagal

Untuk Apache dan LiteSpeed Enterprise

  • Unduh atau salin file .htaccess aktif sebelum mengubahnya.
  • Tambahkan blok hardening di luar penanda WordPress.
  • Letakkan blok khusus di atas # BEGIN WordPress.
  • Jangan mengedit isi di antara # BEGIN WordPress dan # END WordPress karena WordPress dapat menulis ulang bagian tersebut.
  • Jika muncul error 500, pulihkan file sebelumnya atau ubah nama .htaccess melalui File Manager, SFTP, atau SSH.

Untuk Nginx

  • Simpan salinan konfigurasi virtual host atau file include yang aktif.
  • Jangan mengganti blok PHP-FPM yang sudah bekerja dengan contoh generik dari internet.
  • Jalankan nginx -t sebelum reload.
  • Gunakan reload, bukan restart paksa, mengikuti prosedur server atau panel hosting.
  • Jika test gagal, jangan reload; perbaiki atau pulihkan konfigurasi sebelumnya.
Jangan menguji malware pada production: pengujian eksekusi PHP di folder uploads harus memakai file uji yang tidak berbahaya pada staging, dilakukan oleh personel berwenang, dan file tersebut segera dihapus setelah test.

Pertanyaan refleksi: apakah backup Anda hanya “ada”, atau sudah pernah dibuktikan dapat dipulihkan?

Lecture 03

Baseline .htaccess untuk Apache 2.4 dan LiteSpeed Enterprise

Blok berikut adalah baseline untuk WordPress single-site pada Apache 2.4 atau LiteSpeed Enterprise yang membaca konfigurasi Apache. Sesuaikan nama file dengan lingkungan Anda. Pasang di document root WordPress, di luar dan sebelum blok WordPress. Uji setiap bagian; hosting dapat membatasi directive melalui kebijakan server.

# ========================================================== # MSP WORDPRESS HARDENING # Apache 2.4 / LiteSpeed Enterprise dalam mode kompatibel Apache # Tempatkan SEBELUM # BEGIN WordPress # ========================================================== # 1. Matikan directory browsing. Options -Indexes # 2. Kurangi informasi versi pada halaman error bawaan server. ServerSignature Off # 3. Lindungi file sensitif. # Cabang utama untuk Apache 2.4 dan lingkungan yang mendukung mod_authz_core. <IfModule mod_authz_core.c> <FilesMatch "(?i)^(wp-config\.php|readme\.html|license\.txt|\.htaccess|\.htpasswd|\.env|composer\.(json|lock)|phpunit\.xml(\.dist)?|debug\.log|error_log)$"> Require all denied </FilesMatch> </IfModule> # Fallback kompatibilitas untuk lingkungan lama yang tidak memuat mod_authz_core. <IfModule !mod_authz_core.c> <FilesMatch "(?i)^(wp-config\.php|readme\.html|license\.txt|\.htaccess|\.htpasswd|\.env|composer\.(json|lock)|phpunit\.xml(\.dist)?|debug\.log|error_log)$"> Order allow,deny Deny from all </FilesMatch> </IfModule> # 4. Cegah eksekusi file PHP dan bentuk turunannya dari folder uploads. # 5. Blokir akses langsung ke file inti yang tidak ditujukan untuk pengunjung. <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-content/uploads/.*\.(php[0-9]?|phtml|phar)(\..*)?$ - [F,L,NC] RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L,NC] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php$ - [F,L,NC] RewriteRule ^wp-includes/theme-compat/ - [F,L,NC] </IfModule> # 6. Tambahkan header keamanan dasar. <IfModule mod_headers.c> Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "camera=(), geolocation=(), microphone=()" Header always set X-XSS-Protection "0" </IfModule> # ========================================================== # AKHIR MSP WORDPRESS HARDENING # ========================================================== # Tempelkan seluruh blok ini di atas penanda WordPress yang sudah ada. # Jangan menyalin ulang atau menghapus aturan WordPress bawaan.

Cara pasang ringkas melalui cPanel atau File Manager

  1. Buka File Manager dan aktifkan tampilan file tersembunyi agar .htaccess terlihat.
  2. Masuk ke document root domain. Lokasinya sering public_html, tetapi addon domain atau subdomain dapat memakai folder lain.
  3. Unduh atau salin .htaccess aktif sebagai backup dengan nama dan waktu yang jelas.
  4. Edit .htaccess, lalu tempelkan blok MSP di bagian paling atas sebelum penanda WordPress yang sudah ada.
  5. Simpan, kemudian buka beranda dan /wp-admin/ melalui jendela incognito.
  6. Jalankan test file sensitif, header, media, API, serta integrasi sesuai matriks pengujian.
  7. Periksa access log dan error log. Jika terjadi error 500 atau fungsi kritis gagal, segera pulihkan backup.
  8. Catat hasil, versi konfigurasi, pelaksana, reviewer, dan waktu pemantauan.

Penjelasan per bagian

  1. Options -Indexes: mencegah server membuat daftar isi folder ketika tidak ada file index. Jika directive ini tidak diizinkan, server dapat memberi error 500; konsultasikan kepada hosting.
  2. ServerSignature Off: mengurangi detail versi pada halaman error bawaan. Ini bukan pengganti update.
  3. FilesMatch: menolak permintaan langsung ke file yang dapat membocorkan konfigurasi, dependency, log, atau informasi instalasi.
  4. Uploads: file media tetap dapat dibaca, tetapi file berakhiran PHP, PHP bernomor, PHTML, atau PHAR ditolak, termasuk nama berlapis seperti contoh.php.jpg.
  5. Include-only: pola mengikuti cakupan yang lebih sempit daripada memblokir seluruh PHP di wp-includes.
  6. Header: always membantu menerapkan header juga pada respons error. Periksa agar CDN, host, aplikasi, dan server tidak menghasilkan nilai ganda atau bertentangan. Sesuaikan X-Frame-Options jika website memang harus ditanam pada domain lain, serta sesuaikan Permissions-Policy jika kamera, lokasi, atau mikrofon merupakan fitur yang sah.
  7. X-XSS-Protection: nilai 0 sengaja menggantikan pola lama 1; mode=block. Perlindungan XSS yang sebenarnya bergantung pada perbaikan kode, output encoding, CSP yang diuji, dan WAF.
Khusus WordPress Multisite: aturan RewriteRule ^wp-includes/[^/]+\.php$ - [F,L,NC] dapat mencegah ms-files.php menghasilkan gambar pada konfigurasi Multisite tertentu. Jangan menerapkan baseline single-site tanpa peninjauan. Jika diperlukan, hilangkan aturan tersebut dan terima perlindungan yang lebih rendah sambil menyusun kontrol pengganti.

Pertanyaan refleksi: aturan mana yang menolak permintaan sebelum PHP dijalankan, dan bukti apa yang menunjukkan penolakan itu benar-benar terjadi?

Lecture 04

Memilih kontrol kondisional tanpa memutus layanan

Baseline berisi aturan yang relatif umum. Kontrol berikut tidak boleh dianggap wajib untuk semua website. Keputusannya bergantung pada integrasi, pola kerja, alamat IP pengguna, arsitektur, dan tingkat risiko.

① XML-RPC: blokir hanya jika tidak digunakan

xmlrpc.php sering menjadi sasaran brute force. Namun, endpoint ini juga dapat dipakai Jetpack, aplikasi WordPress pada perangkat seluler, remote publishing, serta integrasi lama. Tanyakan kepada pemilik website dan periksa log sebelum memblokirnya.

# OPSIONAL — gunakan hanya jika XML-RPC tidak dipakai. <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^xmlrpc\.php$ - [F,L,NC] </IfModule>

Pilih salah satu: blokir bila tidak dipakai, atau pertahankan lalu rate-limit melalui WAF, hosting, LiteSpeed, ModSecurity, atau lapisan proxy jika masih dibutuhkan. Jangan menjalankan kedua kebijakan secara bersamaan tanpa alasan.

② Pembatasan wp-login.php berdasarkan IP

Allowlist IP dapat sangat efektif untuk tim kecil yang selalu masuk melalui IP kantor atau VPN tetap. Aturan ini tidak cocok untuk pegawai yang bekerja dari jaringan seluler, rumah, atau alamat IP yang sering berubah. Pastikan jalur darurat tersedia.

# OPSIONAL — contoh Apache 2.4 untuk IP tetap. # Ganti alamat contoh dengan IP resmi organisasi. <Files "wp-login.php"> <RequireAny> Require ip 203.0.113.10 Require ip 2001:db8:1234::/48 </RequireAny> </Files>

Alamat 203.0.113.10 dan 2001:db8:1234::/48 adalah contoh dokumentasi, bukan alamat yang boleh dipakai begitu saja.

③ Jangan mengunci seluruh wp-admin secara membabi buta

Proteksi tambahan pada area admin dapat berguna, tetapi memblokir seluruh /wp-admin/ dapat memutus wp-admin/admin-ajax.php yang digunakan tema dan plugin untuk fungsi front-end. Gunakan pembatasan yang sempit, dokumentasikan pengecualian, dan uji halaman publik maupun admin.

④ Mengapa daftar User-Agent bukan kontrol utama?

User-Agent hanyalah teks yang dikirim klien dan dapat diganti sesuka pengguna. Bot jahat dapat memakai nama browser biasa, sedangkan script internal yang sah dapat memakai nama seperti Python atau curl. Daftar statis cepat usang dan berisiko memblokir alat monitoring, integrasi, mesin pencari, atau pengujian yang sah.

⑤ Mengapa regex query string tidak sama dengan WAF?

Serangan injeksi tidak dapat diselesaikan hanya dengan mencari kata script, GLOBALS, atau base64_encode pada URL. Payload dapat dikodekan dan diubah, sementara URL yang sah juga dapat memuat pola serupa. Gunakan patch aplikasi, validasi input, output encoding, query parameterized, serta WAF yang dirawat dan diuji.

⑥ CSP dan HSTS harus melalui tahap audit

  • CSP: kuat untuk membantu membatasi sumber script, tetapi WordPress, tema, editor, analytics, iklan, dan plugin sering memakai script atau style inline. Mulai dengan Content-Security-Policy-Report-Only, analisis laporan, lalu perketat.
  • HSTS: hanya diaktifkan setelah seluruh website dan subdomain yang dicakup siap memakai HTTPS secara konsisten. Masa berlaku panjang atau includeSubDomains yang salah dapat mengunci akses pengguna saat sertifikat bermasalah.
Aturan keputusan: setiap kontrol kondisional harus mempunyai alasan, owner, fungsi yang mungkin terdampak, bukti uji, tanggal review, serta rollback. “Banyak tutorial menyarankan” bukan bukti bahwa aturan sesuai untuk website Anda.

Pertanyaan refleksi: apakah XML-RPC pada website Anda benar-benar tidak dipakai, atau hanya diasumsikan tidak dipakai karena tidak terlihat pada browser?

Lecture 05

Melengkapi hardening pada WordPress dan filesystem

Web server dapat menolak permintaan, tetapi keamanan WordPress juga bergantung pada versi software, akun, permission, ownership, database, dan perangkat kerja administrator. Lapisan ini tetap wajib meskipun seluruh skrip server sudah aktif.

Matikan editor file pada Dashboard

Tambahkan directive berikut pada wp-config.php sebelum baris yang menyatakan berhenti mengedit. Perubahan ini menghilangkan kemampuan mengedit file tema dan plugin dari Dashboard untuk seluruh pengguna.

define( 'DISALLOW_FILE_EDIT', true );

Kontrol ini membatasi salah satu cara menjalankan kode ketika akun administrator diambil alih, tetapi tidak mencegah penyerang mengunggah file melalui celah lain.

Permission dan ownership

  • File WordPress pada banyak konfigurasi memakai permission 0644 dan direktori memakai 0755.
  • Ownership harus benar. Angka permission yang terlihat ketat tetap dapat bermasalah jika file dimiliki akun atau proses yang salah.
  • wp-admin, wp-includes, plugin, dan tema sebaiknya tidak dapat ditulis web server kecuali ada kebutuhan yang jelas.
  • wp-content/uploads memerlukan akses tulis untuk unggahan, tetapi tidak memerlukan eksekusi PHP.
  • Jangan memakai 0777 sebagai solusi permanen ketika update atau upload gagal. Cari akar masalah ownership dan konfigurasi.
  • Nilai yang tepat dapat berbeda pada shared hosting, container, managed hosting, SELinux, ACL, atau deployment otomatis. Ikuti dokumentasi lingkungan.

Kontrol yang tetap wajib

Update

Perbarui WordPress core, tema, plugin, PHP, web server, dan sistem operasi. Hapus tema atau plugin yang tidak dipakai.

Identitas

Gunakan password manager, password unik, 2FA atau passkey, least privilege, dan akun admin terpisah untuk pekerjaan berisiko.

Backup

Simpan file dan database di lokasi tepercaya, lindungi dari perubahan, tetapkan retensi, dan lakukan restore drill.

Monitoring

Pantau login gagal, perubahan file, error, perubahan akun, anomali traffic, serta status layanan. Tentukan siapa yang merespons.

Pertanyaan refleksi: jika akun administrator berhasil diambil alih, kontrol apa yang membatasi tindakan penyerang dan siapa yang menerima peringatannya?

Lecture 06

Konfigurasi setara untuk Nginx

Nginx tidak membaca .htaccess. Aturan harus ditempatkan pada konfigurasi Nginx yang melayani domain tersebut, biasanya di dalam blok server atau file include yang dipanggil oleh blok itu. Lokasi file berbeda menurut sistem operasi, panel, container, dan penyedia hosting.

Penting: contoh berikut adalah blok hardening untuk ditambahkan ke konfigurasi yang sudah bekerja. Jangan mengganti seluruh virtual host atau blok PHP-FPM dengan contoh ini. Buat backup, pastikan tidak ada location yang bertabrakan, dan minta review administrator Nginx.

Baseline dalam blok server

# ========================================================== # MSP WORDPRESS HARDENING — NGINX # Tambahkan ke blok server { ... } untuk domain WordPress. # ========================================================== # 1. Jangan tampilkan daftar isi direktori dan kurangi informasi versi. autoindex off; server_tokens off; # 2. Lindungi file sensitif yang mungkin tertinggal di document root. location = /wp-config.php { return 403; } location = /.htaccess { return 403; } location = /.htpasswd { return 403; } location = /.env { return 403; } location ~* ^/(readme\.html|license\.txt)$ { return 403; } location ~* /(composer\.(json|lock)|phpunit\.xml(\.dist)?|debug\.log|error_log)$ { return 403; } # Blokir file atau direktori tersembunyi, tetapi pertahankan /.well-known/. location ~ /\.(?!well-known(?:/|$)) { return 404; } # 3. Cegah eksekusi PHP dan bentuk turunannya dari folder uploads. # Letakkan regex ini SEBELUM location regex PHP yang umum. location ~* ^/wp-content/uploads/.*\.(php[0-9]?|phtml|phar)(\..*)?$ { return 403; } # 4. Blokir akses langsung ke file inti yang tidak ditujukan untuk pengunjung. location ^~ /wp-admin/includes/ { return 403; } location ~* ^/wp-includes/[^/]+\.php$ { return 403; } location ~* ^/wp-includes/js/tinymce/langs/.+\.php$ { return 403; } location ^~ /wp-includes/theme-compat/ { return 403; } # 5. Header keamanan dasar. add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "camera=(), geolocation=(), microphone=()" always; add_header X-XSS-Protection "0" always; # ========================================================== # AKHIR MSP WORDPRESS HARDENING — NGINX # ==========================================================

Opsional: blokir XML-RPC bila tidak dipakai

# Tambahkan di dalam server { ... }. location = /xmlrpc.php { return 403; }

Opsional: rate limiting tanpa mengganti blok PHP-FPM

Contoh berikut membatasi rata-rata permintaan ke wp-login.php dan xmlrpc.php. Permintaan ke URL lain menghasilkan key kosong sehingga tidak dihitung. Nilai rate dan burst harus disesuaikan dengan traffic sah. Gunakan mode observasi atau staging sebelum enforcement.

# BAGIAN A — tempatkan di dalam http { ... }, BUKAN di server { ... }. map $request_uri $msp_wp_auth_key { default ""; ~^/wp-login\.php(?:\?|$) $binary_remote_addr; ~^/xmlrpc\.php(?:\?|$) $binary_remote_addr; } limit_req_zone $msp_wp_auth_key zone=msp_wp_auth:10m rate=10r/m; # BAGIAN B — tempatkan di dalam server { ... } untuk domain WordPress. limit_req zone=msp_wp_auth burst=20 nodelay; limit_req_status 429;

Jika website berada di belakang CDN, load balancer, atau reverse proxy, pastikan Nginx mengenali alamat IP klien yang sebenarnya sebelum memakai rate limiting berbasis IP. Hanya percayai alamat proxy resmi. Jika salah, seluruh pengunjung dapat terlihat berasal dari satu IP proxy dan ikut terblokir.

Uji dan muat ulang

# Periksa sintaks dan file yang dirujuk. nginx -t # Jika hasil test sukses, reload sesuai sistem Anda. systemctl reload nginx

Pada shared hosting atau managed hosting, Anda mungkin tidak memiliki izin menjalankan perintah tersebut. Gunakan menu konfigurasi yang disediakan atau kirim perubahan kepada administrator. Jangan mencoba melewati pembatasan hosting.

Kesalahan Nginx yang sering terjadi

  • Menaruh map di dalam server, padahal konteksnya harus http.
  • Menaruh regex uploads setelah regex PHP umum sehingga permintaan lebih dahulu diteruskan ke PHP-FPM.
  • Membuat location = /wp-login.php baru tanpa menyalin seluruh parameter FastCGI yang dibutuhkan.
  • Menambahkan add_header pada location tertentu lalu tidak menyadari aturan pewarisan header.
  • Melakukan reload tanpa nginx -t.
  • Rate limiting memakai IP proxy, bukan IP pengunjung sebenarnya.
Khusus Multisite: seperti baseline Apache, regex yang memblokir PHP langsung di wp-includes harus ditinjau terhadap mode dan riwayat konfigurasi Multisite. Uji media, subsitus, network admin, dan pemetaan domain sebelum production.

Pertanyaan refleksi: bagian konfigurasi Nginx mana yang berada di konteks http, dan bagian mana yang berada di konteks server?

Lecture 07

Membuktikan hasil dengan test, log, dan rollback

Hardening yang belum diuji hanyalah harapan. Pengujian harus membuktikan dua hal: fungsi sah tetap berjalan dan permintaan yang dilarang benar-benar ditolak. Simpan waktu, URL, expected result, actual result, bukti, dan nama penguji.

Test cepat dari terminal

# Ganti https://contoh.id dengan domain staging Anda. # Header halaman utama. curl -I https://contoh.id/ # File sensitif seharusnya 403 atau 404. curl -I https://contoh.id/wp-config.php curl -I https://contoh.id/readme.html curl -I https://contoh.id/.env # XML-RPC seharusnya 403 hanya jika keputusan Anda adalah memblokirnya. curl -I https://contoh.id/xmlrpc.php # REST API seharusnya tetap sesuai kebutuhan website. curl -I https://contoh.id/wp-json/

Status 403 berarti server memahami permintaan tetapi menolak akses. Status 404 berarti resource tidak ditemukan atau sengaja disamarkan. Keduanya dapat diterima untuk file sensitif selama isi file tidak terkirim. Status 200 pada wp-config.php harus segera diselidiki.

Functional test matrix

Tabel dapat digeser ke kanan atau kiri pada perangkat seluler.

AreaTestExpected resultBukti
Front-endBuka beranda, artikel, pencarian, arsip, dan halaman 404.Tampilan, asset, form, dan navigasi bekerja.Screenshot, status HTTP, dan log error.
LoginLogin benar, password salah, logout, reset password, dan 2FA.Akses sah berhasil; percobaan salah diproses sesuai kebijakan.Catatan waktu, hasil, dan log autentikasi.
AdminBuka Dashboard, editor, media, update, dan fungsi berbasis AJAX.Fungsi yang disetujui tetap berjalan; file editor nonaktif jika dikonfigurasi.Screenshot dan log browser/server.
MediaUpload gambar, tampilkan thumbnail, edit, dan hapus.Media sah dapat disimpan dan ditampilkan.URL media dan hasil aktual.
API dan integrasiUji REST API, webhook, cron, SSO, Jetpack, aplikasi seluler, dan remote publishing yang digunakan.Integrasi yang disetujui tetap berfungsi.Log request, respons, dan konfirmasi owner.
PenolakanAkses file sensitif, PHP uji pada uploads staging, dan endpoint yang diputuskan untuk diblokir.Server menolak sebelum script berjalan.Status 403/404, log, dan tidak ada output PHP.
MultisiteUji subsitus, media lama dan baru, network admin, login, dan domain mapping.Seluruh alur Multisite yang dipakai tetap bekerja.Test report per subsitus kritis.

Rollback trigger

  • Website menghasilkan error 500, 502, 503, atau halaman kosong.
  • Admin yang sah tidak dapat login atau tidak dapat memulihkan akses.
  • Media, editor, checkout, form, API, cron, atau integrasi kritis gagal.
  • Header ganda menimbulkan perilaku yang bertentangan.
  • Error log meningkat tajam atau latency memburuk.
  • Tim belum dapat menjelaskan akar masalah dalam batas waktu perubahan.

Pertanyaan refleksi: test mana yang membuktikan website tetap berguna, dan test mana yang membuktikan serangan tertentu benar-benar ditolak?

Lecture 08

Menjadikan plugin keamanan sebagai pilihan berbasis kebutuhan

Hardening server dapat mengurangi kebutuhan memeriksa permintaan sederhana di dalam WordPress. Hal ini membantu performa karena request ditolak lebih awal. Namun, web server tidak memahami seluruh konteks pengguna, perubahan konten, reputasi plugin, atau perilaku administrator. Plugin keamanan bukan wajib untuk setiap fungsi, tetapi tetap berguna ketika menutup gap yang nyata.

Tabel dapat digeser ke kanan atau kiri pada perangkat seluler.

KebutuhanKonfigurasi serverPlugin atau layanan tambahanKeputusan
Directory listing dan file sensitifSangat sesuai.Biasanya tidak diperlukan untuk fungsi yang sama.Gunakan server sebagai kontrol utama.
Blokir PHP di uploadsSangat sesuai.Scanning dapat menambah deteksi file berbahaya lain.Server mencegah eksekusi; scanning bersifat pelengkap.
Rate limiting loginSesuai bila server, proxy, atau WAF mendukung.Plugin dapat dipakai jika host tidak menyediakan kontrol lebih awal.Utamakan edge atau server saat tersedia.
2FA dan passkeyTidak disediakan oleh aturan ini.Memerlukan plugin tepercaya atau identity provider/SSO.Wajib dipertimbangkan untuk akun istimewa.
Audit aktivitas adminAccess log tidak selalu mengetahui konteks tindakan WordPress.Plugin audit atau platform terpusat dapat memberi konteks.Pakai bila kebutuhan audit dan investigasi membutuhkannya.
File integrity dan malware scanningDapat dilakukan oleh agent server atau platform hosting.Plugin dapat membantu jika tidak ada kemampuan di server.Pilih satu mekanisme yang dapat dipantau dan ditindaklanjuti.
Informasi kerentanan komponenTidak otomatis.Layanan vulnerability monitoring atau plugin dapat memberi alert.Tetap butuh proses patch dan owner.
Backup dan pemulihanTidak diselesaikan oleh aturan request.Gunakan sistem backup hosting, server, atau layanan khusus.Wajib, terlepas dari penggunaan plugin keamanan.

Kriteria memilih plugin keamanan

  • Plugin menutup kebutuhan yang belum ditangani server, host, CDN, atau proses organisasi.
  • Plugin aktif dipelihara, kompatibel dengan versi WordPress dan PHP, serta berasal dari sumber tepercaya.
  • Fitur yang tumpang tindih dimatikan agar tidak terjadi konflik atau pemeriksaan ganda.
  • Beban CPU, memori, database, cron, dan penyimpanan log diuji pada staging.
  • Alert mempunyai owner dan prosedur respons; notifikasi yang tidak pernah ditindaklanjuti bukan kontrol yang efektif.
  • Plugin yang tidak digunakan dihapus, bukan sekadar dinonaktifkan.
Kesimpulan praktis: gunakan konfigurasi server untuk kontrol yang sederhana dan stabil; gunakan WAF atau edge untuk traffic berbahaya bervolume tinggi; gunakan WordPress atau plugin untuk konteks aplikasi seperti 2FA dan audit; gunakan backup serta monitoring sebagai jalur pemulihan. Pilihan terbaik sering berupa beberapa kontrol kecil yang saling melengkapi.

Pertanyaan refleksi: fitur plugin mana yang benar-benar menutup gap, dan fitur mana yang hanya mengulang pekerjaan web server?

Assignments

Kerjakan seluruh assignment pada website latihan atau staging yang Anda miliki dan berwenang untuk kelola. Jangan menguji akses tanpa izin.

01

Inventaris server dan ketergantungan

Identifikasi web server, versi, panel, document root, jenis WordPress, CDN/proxy, XML-RPC, REST API, SSO, cron, dan integrasi kritis.

Output: Server and Dependency Inventory dengan sumber bukti dan owner.

02

Rencana perubahan dan rollback

Tentukan scope, backup, waktu perubahan, test, indikator gagal, jalur akses darurat, dan batas waktu rollback.

Output: Hardening Change Plan yang disetujui pemilik layanan.

03

Baseline Apache atau LiteSpeed

Adaptasi baseline .htaccess, terapkan satu kelompok aturan per tahap, lalu uji halaman, media, admin, API, dan endpoint yang ditolak.

Output: konfigurasi bertanggal, diff, hasil test, dan bukti rollback.

04

Desain baseline Nginx

Petakan bagian yang masuk ke http dan server, urutkan location, pertahankan PHP-FPM aktif, dan lakukan review administrator.

Output: Nginx Security Include dan bukti nginx -t pada lingkungan uji.

05

Matriks verifikasi

Jalankan test positif, test penolakan, pemeriksaan header, log review, uji integrasi, dan rollback drill.

Output: Verification Report dengan expected result, actual result, bukti, status, dan tindak lanjut.

06

Analisis gap dan plugin

Bandingkan kebutuhan dengan cakupan server, host, CDN/WAF, WordPress, proses manual, dan plugin. Hilangkan duplikasi yang tidak memberi nilai.

Output: Security Coverage Matrix dan keputusan plugin: dipakai, dibatasi, diganti, atau tidak diperlukan.

Self-Assessment

Jawab tanpa membuka kunci terlebih dahulu. Gunakan hasilnya untuk menentukan bagian yang perlu dipelajari ulang.

① Apakah Nginx membaca file .htaccess?

Jawaban: tidak. Konfigurasi harus ditempatkan pada konteks Nginx yang sesuai, biasanya blok http, server, atau file include yang dipanggil dari sana.

② Mengapa blok hardening diletakkan di luar penanda BEGIN dan END WordPress?

Jawaban: WordPress dapat menulis ulang isi di antara penanda tersebut. Aturan khusus yang diletakkan di dalamnya dapat hilang ketika permalink atau konfigurasi rewrite diperbarui.

③ Apa sintaks akses yang diutamakan pada Apache 2.4?

Jawaban: Require all denied. Directive Order, Allow, dan Deny berasal dari modul kompatibilitas lama dan tidak sebaiknya menjadi pilihan utama.

④ Kapan xmlrpc.php boleh diblokir sepenuhnya?

Jawaban: setelah dipastikan tidak dipakai oleh Jetpack, aplikasi seluler, remote publishing, atau integrasi lain. Jika masih dipakai, pertahankan lalu batasi melalui rate limiting atau WAF.

⑤ Mengapa daftar User-Agent bot tidak dapat menjadi pertahanan utama?

Jawaban: nilai User-Agent dapat dipalsukan. Bot jahat dapat mengaku sebagai browser biasa, sedangkan klien sah dapat memiliki nama yang masuk daftar blokir.

⑥ Apakah regex pada query string dapat menggantikan perbaikan celah XSS atau SQL injection?

Jawaban: tidak. Regex sederhana dapat dilewati dan dapat memblokir request sah. Celah harus diperbaiki pada kode dan dilengkapi validasi, output encoding, query parameterized, update, serta WAF yang sesuai.

⑦ Mengapa course ini tidak memakai X-XSS-Protection: 1; mode=block?

Jawaban: mekanisme tersebut sudah usang dan dalam kondisi tertentu dapat menciptakan risiko. OWASP menyarankan tidak mengirimkannya atau menyetelnya ke 0, lalu memakai CSP yang dirancang dengan benar bila diperlukan.

⑧ Apa yang harus dilakukan sebelum reload Nginx?

Jawaban: jalankan nginx -t. Reload hanya dilakukan jika pemeriksaan sintaks dan file yang dirujuk berhasil.

⑨ Apa risiko rate limiting berbasis IP ketika website berada di belakang CDN?

Jawaban: jika real IP belum dikonfigurasi dengan benar, Nginx dapat melihat seluruh pengunjung sebagai satu IP proxy. Akibatnya, pengguna sah dapat dibatasi bersama-sama.

⑩ Apakah hardening server menggantikan update, 2FA, backup, dan monitoring?

Jawaban: tidak. Hardening server hanya menangani sebagian risiko. Keamanan tetap memerlukan patch, autentikasi kuat, least privilege, backup yang teruji, log, monitoring, dan respons insiden.

Interpretasi hasil

  • 9–10 benar: siap menyusun capstone dan melakukan review teknis bersama administrator.
  • 7–8 benar: ulangi lecture tentang kontrol kondisional, Nginx, dan verifikasi.
  • 5–6 benar: ulangi baseline dari awal dan praktikkan di staging.
  • 0–4 benar: jangan menerapkan pada production; minta pendampingan dan selesaikan assignment dasar.

Capstone · Paket Hardening WordPress Berbasis Bukti

Pilih satu website WordPress staging yang sah. Susun, terapkan, dan buktikan paket hardening sesuai web server. Capstone tidak dinilai dari banyaknya aturan, melainkan dari ketepatan scope, minimnya gangguan, kekuatan bukti, dan kemampuan memulihkan layanan.

Deliverable wajib

  1. Server and Dependency Inventory: server, versi, proxy, panel, document root, jenis WordPress, owner, serta integrasi.
  2. Threat and Control Map: jalur risiko, kontrol yang dipilih, lapisan penerapan, keterbatasan, dan residual risk.
  3. Configuration Package: .htaccess atau Nginx include yang telah disesuaikan, diberi versi, dan direview.
  4. Control Decision Register: keputusan untuk XML-RPC, login, User-Agent, query regex, headers, CSP, HSTS, Multisite, serta rate limiting.
  5. Verification Report: test fungsi, test penolakan, header, log, performa, integrasi, dan actual result.
  6. Rollback Evidence: backup, langkah pemulihan, waktu yang dibutuhkan, dan hasil rollback drill.
  7. Security Coverage Matrix: pembagian kontrol antara web server, host, CDN/WAF, WordPress, plugin, serta proses manusia.
  8. Operations Note: owner monitoring, indikator insiden, masa retensi log, jadwal review, dan jalur eskalasi.

Template change record

ID perubahan: Website dan lingkungan: Pemilik layanan: Pelaksana: Reviewer: Tanggal dan jendela perubahan: Jenis web server: Masalah yang dikurangi: Aturan yang ditambah atau diubah: Fungsi yang mungkin terdampak: Backup dan lokasi pemulihan: Pre-check: Test positif: Test penolakan: Expected result: Actual result: Bukti: Rollback trigger: Langkah rollback: Hasil monitoring: Keputusan akhir: lanjut / perbaiki / rollback

Rubrik penilaian

Tabel dapat digeser ke kanan atau kiri pada perangkat seluler.

KomponenBobotKriteria kuatKesalahan yang harus dihindari
Inventaris dan scope15Server, integrasi, owner, Multisite, proxy, dan fungsi kritis dibuktikan.Menebak server atau melupakan ketergantungan.
Ketepatan konfigurasi25Sintaks sesuai platform, aturan sempit, urutan benar, dan tidak menduplikasi blok yang aktif.Menyalin mentah, mengganti PHP-FPM, atau memakai directive lama tanpa alasan.
Keputusan berbasis risiko15XML-RPC, login, header, CSP, HSTS, dan plugin dipilih dengan alasan serta residual risk.Menganggap semua kontrol wajib untuk semua website.
Verifikasi20Fungsi normal dan penolakan diuji; actual result, log, header, dan bukti dicatat.Hanya menguji beranda atau memakai kalimat “seharusnya aman”.
Rollback dan pemulihan15Backup tersedia, jalur akses darurat bekerja, dan rollback drill berhasil dalam batas waktu.Backup belum pernah diuji atau hanya dapat diakses melalui WordPress.
Operasi dan komunikasi10Owner, monitoring, review periodik, eskalasi, dan catatan perubahan jelas.Alert tanpa owner atau perubahan tanpa dokumentasi.
Kriteria lulus: nilai minimal 75, tidak ada kesalahan kritis pada syntax atau akses, seluruh fungsi bisnis penting lulus test, file sensitif tidak dapat dibaca, rollback berhasil, dan residual risk telah diterima pemilik layanan.

FAQ dan Referensi

Apakah website WordPress menjadi aman tanpa plugin keamanan?

Tidak ada konfigurasi yang membuat website sepenuhnya aman. Hardening server dapat mengurangi permukaan serangan dan beban PHP, tetapi update, akun, 2FA, permission, backup, monitoring, secure coding, serta respons insiden tetap diperlukan. Plugin bersifat opsional berdasarkan gap yang belum ditangani.

Apakah skrip .htaccess dalam course ini dapat langsung dipakai di semua hosting?

Tidak. Baseline harus diuji karena modul, AllowOverride, versi Apache, mode LiteSpeed, struktur WordPress, dan kebijakan hosting berbeda. Directive yang tidak diizinkan dapat memunculkan error 500.

Apakah LiteSpeed dan OpenLiteSpeed sama dalam membaca .htaccess?

Tidak. LiteSpeed Enterprise dirancang membaca konfigurasi Apache termasuk .htaccess pada lingkungan yang sesuai. OpenLiteSpeed tidak otomatis membaca .htaccess; aturan perlu dimasukkan melalui konfigurasi atau WebAdmin OpenLiteSpeed.

Apa yang dilakukan jika muncul 500 Internal Server Error setelah mengubah .htaccess?

Pulihkan salinan sebelumnya atau ubah nama .htaccess melalui File Manager, SFTP, atau SSH. Periksa error log untuk menemukan directive yang tidak didukung atau salah tulis. Terapkan ulang satu kelompok aturan per tahap.

Apakah xmlrpc.php selalu harus diblokir?

Tidak. Blokir jika tidak dipakai. Jika Jetpack, aplikasi seluler, remote publishing, atau integrasi lain membutuhkannya, pertahankan lalu gunakan rate limiting atau WAF dan pantau log.

Mengapa tidak memakai daftar nama bot yang panjang?

User-Agent dapat dipalsukan dan daftar statis cepat usang. Pembatasan berbasis perilaku, rate limiting, WAF, challenge, log, dan pemblokiran sementara lebih dapat dipertanggungjawabkan.

Apakah menyembunyikan URL wp-login sudah cukup?

Tidak. Perubahan URL dapat mengurangi noise, tetapi bukan pengganti password unik, 2FA atau passkey, rate limiting, least privilege, patch, dan monitoring.

Mengapa CSP dan HSTS tidak dimasukkan ke baseline siap pakai?

Keduanya kuat tetapi berdampak besar jika salah. CSP dapat memblokir script, style, editor, atau layanan eksternal. HSTS dapat mengunci browser ke HTTPS dalam waktu lama. Lakukan inventaris, mode report-only untuk CSP, audit seluruh subdomain, dan rollout bertahap.

Apakah status 403 lebih aman daripada 404 untuk file sensitif?

Keduanya dapat dipakai. Yang terpenting adalah isi file tidak terkirim. Status 404 mengurangi informasi keberadaan file, sedangkan 403 lebih mudah dibedakan saat pengujian. Jangan menganggap penyamaran status sebagai kontrol utama.

Apakah permission 0644 dan 0755 selalu benar?

Nilai tersebut umum, tetapi bukan aturan universal. Ownership, user proses web, shared hosting, container, ACL, SELinux, dan mekanisme deployment dapat mengubah kebutuhan. Ikuti dokumentasi host dan gunakan hak minimum yang tetap memungkinkan operasi sah.

Bagaimana jika website menggunakan Cloudflare atau reverse proxy?

Pastikan origin hanya mempercayai proxy resmi dan web server menerima alamat IP klien dengan konfigurasi real IP yang benar. Jika tidak, log dan rate limiting dapat menggunakan IP proxy sehingga hasilnya salah.

Kapan plugin keamanan layak dipasang?

Ketika plugin menutup kebutuhan nyata yang belum ditangani lapisan lain, seperti 2FA, passkey, audit aktivitas, file integrity, vulnerability alert, atau scanning. Uji performa, hindari fitur tumpang tindih, tetapkan owner alert, dan hapus plugin yang tidak dipakai.

Kurangi Permukaan Serangan, Buktikan Setiap Perubahan

Mulai dari satu website staging. Kenali web server. Petakan fungsi yang harus tetap hidup. Cadangkan konfigurasi. Terapkan aturan dalam kelompok kecil. Uji halaman, login, admin, media, API, integrasi, file sensitif, header, dan log. Siapkan rollback sebelum menyentuh production.

Gunakan plugin keamanan ketika benar-benar menutup gap—bukan karena jumlah fitur terlihat banyak. Kontrol yang ringan, jelas pemiliknya, dapat diuji, dan dapat dipulihkan lebih bernilai daripada aturan panjang yang tidak dipahami.

Pelajari fondasi yang lebih luas pada Keamanan Website · OCW MSP dan materi edukasi lain di website PT Mitra Solusindo Pratama.

Catatan editorial: Course ini merupakan materi edukasi umum dan bukan jaminan keamanan. Konfigurasi contoh harus disesuaikan dengan versi server, modul, panel, arsitektur, proxy, plugin, tema, integrasi, kebijakan, dan tingkat risiko. Terapkan hanya pada sistem yang Anda miliki atau yang memberikan izin. Gunakan staging, backup, version control, least privilege, change management, log, monitoring, dan rollback. Minta review tenaga yang kompeten sebelum production. Jangan menjalankan payload berbahaya, malware, atau pengujian agresif pada website tanpa izin. Dokumentasi dan perilaku produk dapat berubah setelah course diterbitkan.

Kutip Artikel Ini:

Memuat format sitasi...
PT Mitra Solusindo Pratama OpenCourseWare © 2026 by Hilfan Soeltansyah is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 InternationalCreative Commons Attribution 4.0 International license. Attribution-NonCommercial-ShareAlike 4.0 InternationalAttribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.NonCommercial — You may not use the material for commercial purposes.ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
Location: Jakarta, Indonesia

Tidak ada komentar

Posting Komentar

Silakan ajukan pertanyaan, kritik, maupun saran.

PT MSP Bandung

The page you were looking for, could not be found. You may have typed the address incorrectly or you may have used an outdated link.

Go to Homepage