Cek keamanan website toko online tanpa meretas apa pun
Pemeriksaan keamanan pasif toko online: masa berlaku sertifikat TLS, HSTS, CSP, nosniff, flag cookie, mixed content, jQuery usang, security.txt, DMARC.
Tim Redaksi FixReports10 menit baca
Anda bisa memeriksa banyak aspek keamanan toko online dari luar, cukup dengan membaca apa yang sudah dikirim situs tersebut ke setiap pengunjung: sertifikat TLS, redirect, header respons HTTP, cookie, skrip yang dimuat, dan record DNS publiknya. Pemeriksaan pasif ini tidak mengirim lalu lintas serangan dan tidak memerlukan login, sehingga bebannya pada toko tidak lebih besar daripada kunjungan biasa. Pemeriksaan ini menemukan celah konfigurasi seperti sertifikat yang hampir kedaluwarsa, HSTS yang tidak ada, cookie yang tidak aman, mixed content, atau versi jQuery dengan kerentanan yang sudah diketahui. Pemeriksaan ini bukan uji penetrasi (penetration test) dan tidak bisa membuktikan bahwa sebuah toko aman.
Poin penting
- Sertifikat TLS tepercaya publik yang diterbitkan sejak 15 Maret 2026 hanya boleh berlaku paling lama 200 hari, lalu turun menjadi 100 hari pada Maret 2027 dan 47 hari pada Maret 2029 (CA/Browser Forum (terbuka di tab baru)).
- Browser mengabaikan header HSTS jika dikirim melalui HTTP biasa (MDN (terbuka di tab baru)).
- Direktif CSP
frame-ancestorstidak berfungsi di dalam tag<meta>; direktif ini harus dikirim sebagai header respons (MDN (terbuka di tab baru)). - Versi jQuery sebelum 3.5.0 terdampak dua kerentanan XSS, dan CISA memasukkan salah satunya, CVE-2020-11023, ke katalog Known Exploited Vulnerabilities pada 23 Januari 2025 (NVD (terbuka di tab baru)).
- File
security.txtharus berisi kolomContactdanExpiresdan ditempatkan di/.well-known/security.txt(RFC 9116 (terbuka di tab baru)).
Apa yang dimaksud dengan pemeriksaan keamanan pasif?
Pemeriksaan pasif hanya membaca apa yang dikembalikan situs atau DNS-nya untuk permintaan biasa.
Artinya, memuat halaman publik, membaca sertifikat dan header respons, mendaftar cookie dan skrip yang dipasang sebuah halaman, serta melakukan kueri record DNS publik. Pemeriksaan pasif tidak menebak kata sandi, tidak mengirim payload injeksi, tidak mencoba-coba URL admin, dan tidak memindai port. Semua yang dijelaskan di bawah ini bisa dilakukan dengan browser, curl, openssl, dan dig.
Bagaimana cara memeriksa sertifikat TLS dan masa berlakunya?
Baca langsung tanggal dan nama yang tercantum di sertifikat, dan pastikan perpanjangannya berjalan otomatis.
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
Pastikan notAfter masih cukup jauh di masa depan, sertifikat mencakup example.com dan www.example.com jika Anda memakai keduanya (penampil sertifikat di browser mencantumkan nama-nama tersebut), dan browser tidak menampilkan peringatan apa pun. Masa berlaku sertifikat makin pendek berdasarkan CA/Browser Forum Baseline Requirements (bagian 6.3.2, versi 2.3.1 per Oktober 2026), menyusul Ballot SC-081v3 (terbuka di tab baru) yang diadopsi pada 11 April 2025:
| Sertifikat diterbitkan | Masa berlaku maksimum |
|---|---|
| Sebelum 15 Maret 2026 | 398 hari |
| 15 Maret 2026 hingga 14 Maret 2027 | 200 hari |
| 15 Maret 2027 hingga 14 Maret 2029 | 100 hari |
| Mulai 15 Maret 2029 | 47 hari |
Masa berlaku yang pendek membuat perpanjangan manual berisiko, jadi pastikan layanan hosting atau alat sertifikat Anda memperpanjangnya secara otomatis. Pastikan juga HTTP biasa dialihkan ke HTTPS:
curl -sI http://example.com/ | grep -i -E "^HTTP|^location"
Yang Anda harapkan adalah respons 301 (atau 308) dengan header location yang diawali https://.
Header keamanan apa saja yang sebaiknya dikirim toko online?
Sekumpulan kecil header respons bisa memblokir serangan umum di sisi browser dengan biaya yang hampir nol.
| Header | Fungsinya | Nilai umum | Sumber |
|---|---|---|---|
Strict-Transport-Security | Memberi tahu browser untuk hanya menggunakan HTTPS dan mencegah pengguna mengabaikan error sertifikat | max-age=31536000; includeSubDomains | MDN (terbuka di tab baru) |
Content-Security-Policy: frame-ancestors | Mengatur situs mana yang boleh menyematkan halaman Anda, sehingga melindungi dari clickjacking | frame-ancestors 'self' | MDN (terbuka di tab baru) |
X-Frame-Options | Kontrol framing versi lama; menurut OWASP, frame-ancestors membuatnya usang di browser yang mendukung | DENY atau SAMEORIGIN | OWASP (terbuka di tab baru) |
X-Content-Type-Options | Mencegah MIME sniffing dan memblokir skrip serta stylesheet yang dikirim dengan tipe yang salah | nosniff | MDN (terbuka di tab baru) |
Referrer-Policy | Membatasi seberapa banyak bagian URL Anda yang dikirim ke situs lain | strict-origin-when-cross-origin | OWASP |
X-XSS-Protection | Header filter XSS browser; menurut OWASP, header ini justru bisa menimbulkan kerentanan XSS di situs yang sebenarnya aman | Jangan dipasang, atau 0 | OWASP |
Periksa apa yang dikirim toko Anda:
curl -sI https://example.com/
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: frame-ancestors 'self'
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Ada dua hal yang perlu diperhatikan. includeSubDomains memblokir subdomain mana pun yang hanya berfungsi lewat HTTP, jadi periksa subdomain Anda terlebih dahulu. Preloading HSTS mewajibkan max-age minimal 31536000 dan includeSubDomains, jadi tambahkan preload hanya jika setiap subdomain sudah siap untuk HTTPS. CSP lengkap yang membatasi skrip layak dimiliki, tetapi OWASP mencatat bahwa CSP rumit untuk dikonfigurasi dan dipelihara, dan toko yang memakai banyak aplikasi perlu mengujinya dengan cermat.
Apakah cookie Anda sudah diatur dengan Secure, HttpOnly, dan SameSite?
Cookie sesi dan keranjang sebaiknya memiliki ketiga atribut tersebut, dan Anda bisa melihatnya di header respons Set-Cookie.
| Atribut | Efeknya (menurut MDN (terbuka di tab baru)) | Kapan penting |
|---|---|---|
Secure | Hanya dikirim melalui HTTPS; situs yang memakai HTTP biasa tidak bisa memasangnya | Setiap cookie di toko yang memakai HTTPS |
HttpOnly | JavaScript tidak bisa membacanya melalui document.cookie, sehingga membantu melindungi dari XSS | Sesi login dan keranjang |
SameSite=Lax atau Strict | Membatasi kapan cookie dikirim pada permintaan lintas situs | Sesi; Strict cocok untuk cookie autentikasi dan keranjang |
SameSite=None | Dikirim pada permintaan lintas situs; harus dikombinasikan dengan Secure | Hanya fitur pihak ketiga tersemat yang memerlukannya |
Jika atribut SameSite tidak diatur, browser memperlakukan cookie sebagai Lax. Cookie yang perlu dibaca oleh skrip Anda sendiri tidak bisa diberi HttpOnly, jadi fokuslah pada cookie yang mengidentifikasi pelanggan yang sedang login atau admin.
curl -sI https://example.com/ | grep -i "^set-cookie"
Developer tools di browser menampilkan informasi yang sama, termasuk cookie yang dipasang oleh skrip setelah halaman dimuat.
Bagaimana cara menemukan mixed content?
Mixed content adalah resource apa pun yang dimuat melalui HTTP di halaman yang disajikan melalui HTTPS, dan konsol browser mencantumkannya.
MDN (terbuka di tab baru) membaginya menjadi dua kelompok. Gambar, audio, dan video termasuk "upgradable": browser secara otomatis memintanya melalui HTTPS. Skrip, stylesheet, iframe, font, dan permintaan fetch() termasuk "blockable": browser memblokirnya, sehingga apa pun yang bergantung padanya akan rusak. Permintaan yang di-upgrade ke alamat IP langsung juga diblokir.
Untuk menemukannya, buka konsol di template utama Anda (beranda, koleksi, produk, keranjang) dan cari http:// di kode tema, konten halaman, dan pengaturan aplikasi. Pusat bantuan Shopify menyatakan bahwa setiap halaman toko yang memiliki aset yang tidak dikirim melalui HTTPS dianggap tidak aman (terbuka di tab baru), dan menyarankan agar aset di-hosting di Shopify atau disajikan melalui HTTPS. Di WooCommerce, periksa konten postingan lama dan opsi tema jika situs Anda pernah berjalan di http://.
Bagaimana cara mendeteksi library JavaScript usang dengan CVE yang sudah diketahui?
Buat daftar library yang dimuat setiap halaman, baca versinya, dan bandingkan dengan National Vulnerability Database.
Mulailah dari jQuery. Di konsol browser, $.fn.jquery mengembalikan versi yang dimuat (jQuery API (terbuka di tab baru)). Versi yang perlu ditandai:
| CVE | Versi yang terdampak | Masalah | Skor NVD (v3.1) |
|---|---|---|---|
| CVE-2020-11022 (terbuka di tab baru) | 1.12.0 hingga sebelum 3.5.0 | Meneruskan HTML yang tidak tepercaya ke method seperti .html() atau .append() bisa menjalankan kode | 6,1 Medium |
| CVE-2020-11023 (terbuka di tab baru) | 1.0.3 hingga sebelum 3.5.0 | Sama, untuk HTML yang berisi elemen <option>; masuk katalog KEV milik CISA sejak 23 Januari 2025 | 6,1 Medium |
| CVE-2019-11358 (terbuka di tab baru) | Sebelum 3.4.0 | Prototype pollution melalui jQuery.extend(true, ...) | 6,1 Medium |
Kedua masalah tahun 2020 tersebut sudah diperbaiki di jQuery 3.5.0. Versi yang rentan berarti kode yang bermasalah ada di situs Anda; apakah kode itu bisa dieksploitasi bergantung pada cara situs meneruskan data ke kode tersebut. WordPress sudah menyertakan jQuery 3.5.1 sejak versi 5.6 (terbuka di tab baru), jadi jQuery versi lama di toko WooCommerce menandakan WordPress yang belum diperbarui atau tema maupun plugin yang memuat salinan jQuery-nya sendiri. Di Shopify, periksa file tema Anda dan aplikasi yang menyisipkan skrip.
Apa itu security.txt dan apakah toko Anda memerlukannya?
security.txt adalah file teks biasa yang memberi tahu peneliti keamanan cara melaporkan kerentanan kepada Anda.
RFC 9116 (terbuka di tab baru) (April 2022, sebuah RFC berstatus Informational, jadi mengikutinya bersifat sukarela) menyatakan bahwa file ini harus disajikan melalui HTTPS di /.well-known/security.txt sebagai text/plain. Contact dan Expires wajib ada, dan RFC tersebut menyarankan tanggal Expires kurang dari satu tahun ke depan.
Contact: mailto:security@example.com
Expires: 2027-09-30T23:00:00.000Z
Preferred-Languages: en
Policy: https://example.com/security-policy
Di WooCommerce, Anda bisa menaruh file ini di server Anda. Di platform yang di-hosting, periksa apakah Anda bisa memublikasikan file di path tersebut; jika tidak bisa, kontak keamanan yang diberi label jelas di halaman kontak Anda tetap membantu.
Bagaimana DMARC melindungi toko Anda dari spoofing email?
DMARC memungkinkan Anda meminta penyedia layanan email untuk mengarantina atau menolak email yang memakai domain Anda di alamat From tanpa lolos SPF atau DKIM yang selaras.
Record dengan p=none hanya mengumpulkan laporan; record itu tidak menghentikan email palsu. Pelanggan mengharapkan konfirmasi pesanan dan reset kata sandi dari domain Anda, jadi email phishing yang menampilkan domain Anda persis sama layak diblokir. Periksa kebijakan Anda dengan dig +short TXT _dmarc.example.com, dan lihat RFC 9989 (terbuka di tab baru) untuk spesifikasinya. DMARC tidak mencakup domain tiruan yang mirip (lookalike domain), hanya domain yang memublikasikan record tersebut.
Apa yang dikelola Shopify, dan apa yang Anda kendalikan di WooCommerce?
Shopify menjalankan server di balik storefront-nya, sedangkan toko WooCommerce yang di-hosting sendiri menyerahkan pengaturan server kepada Anda dan penyedia hosting Anda.
| Pemeriksaan | Shopify | WooCommerce (di-hosting sendiri) |
|---|---|---|
| Sertifikat TLS | Gratis untuk semua domain yang ditambahkan ke Shopify (terbuka di tab baru); bisa memakan waktu hingga 48 jam untuk domain pihak ketiga | Penyedia hosting Anda atau pengaturan Anda sendiri |
| Redirect HTTP ke HTTPS | Platform | Pengaturan web server, CDN, atau hosting |
| Header keamanan | Dikirim oleh server Shopify | Web server, CDN, atau plugin |
| Flag cookie | Cookie milik Shopify diatur oleh platform; cookie dari aplikasi dan tema menjadi tanggung jawab Anda | WordPress core, plugin, dan server |
| Mixed content dan library JS | Tema, konten, dan aplikasi Anda | Tema, konten, dan plugin Anda |
| security.txt dan DMARC | Domain dan DNS Anda | Domain dan DNS Anda |
Saat kami memeriksa beberapa storefront yang di-hosting Shopify pada Oktober 2026, responsnya menyertakan HSTS dengan max-age sekitar 91 hari, X-Content-Type-Options: nosniff, dan CSP dengan upgrade-insecure-requests, sementara frame-ancestors berbeda-beda antartoko. Shopify menyatakan bahwa mereka tersertifikasi patuh PCI DSS Level 1 (terbuka di tab baru). Tema dan aplikasi yang Anda pasang tetap menjadi tanggung jawab Anda.
Untuk WooCommerce, panduan hardening (terbuka di tab baru) WordPress menyarankan agar WordPress dan plugin selalu diperbarui, plugin yang tidak dipakai dihapus, dan Anda menanyakan langkah pengamanan apa saja yang diterapkan penyedia hosting Anda.
Mengapa ini bukan uji penetrasi?
Uji penetrasi secara aktif mencoba melakukan serangan; pemeriksaan pasif hanya mengamati.
NIST SP 800-115 mendefinisikan uji penetrasi sebagai pengujian keamanan di mana penguji meniru serangan dunia nyata untuk menemukan cara menembus fitur keamanan sebuah sistem (glosarium NIST (terbuka di tab baru)). Pemeriksaan pasif tidak bisa melihat celah di sisi server pada plugin, kata sandi admin yang lemah atau dipakai ulang, autentikasi dua faktor yang tidak diaktifkan, kontrol akses yang rusak, atau kode rentan yang tidak pernah muncul di sumber halaman. Gunakan pemeriksaan pasif sebagai acuan dasar yang bisa Anda ulangi kapan saja. Untuk jaminan yang lebih mendalam, pesanlah uji penetrasi dengan cakupan tertulis, pada sistem yang Anda miliki atau yang Anda berwenang untuk diuji.
Pemindaian gratis menjalankan pemeriksaan awal pada toko Anda. Laporan Keamanan Website mencakup pemeriksaan pasif dalam artikel ini, mulai dari TLS dan redirect hingga header, cookie, mixed content, library usang, security.txt, dan DMARC, lengkap dengan perbaikan untuk setiap temuan. Seperti tinjauan pasif lainnya, laporan ini tidak bisa menjamin bahwa sebuah toko aman.
Pertanyaan yang sering diajukan
Apakah pemeriksaan keamanan pasif membahayakan toko saya?
Tidak lebih dari kunjungan biasa. Pemeriksaan ini meminta halaman publik dan record DNS yang sama seperti yang diminta browser atau server email mana pun, dan tidak mencoba login atau mengirim payload serangan.
Bisakah saya menambahkan header keamanan di Shopify?
Header respons storefront berasal dari server Shopify, jadi hubungi Shopify Support jika ada header yang Anda butuhkan tetapi belum tersedia. Tag <meta> CSP di tema Anda bisa menambahkan beberapa direktif, tetapi MDN mencatat bahwa frame-ancestors tidak didukung di <meta>.
Apakah versi jQuery yang lama berarti toko saya sudah diretas?
Tidak. Itu berarti kode dengan kerentanan yang sudah diketahui sedang dimuat, sehingga risikonya meningkat jika situs meneruskan HTML yang tidak tepercaya ke method yang terdampak. Perbarui jQuery, atau hapus tema atau plugin yang memuatnya.
Berapa lama sertifikat TLS bisa berlaku sekarang?
Sertifikat tepercaya publik yang diterbitkan mulai 15 Maret 2026 hanya boleh berlaku paling lama 200 hari. Batas ini turun menjadi 100 hari mulai 15 Maret 2027 dan 47 hari mulai 15 Maret 2029.
Apakah file security.txt wajib ada?
RFC 9116 adalah RFC berstatus Informational, jadi memublikasikan file ini bersifat sukarela menurut standar tersebut. Biayanya murah dan file ini memberi peneliti cara yang jelas untuk menghubungi Anda.
Apakah hasil pemindaian pasif yang bersih berarti toko saya aman?
Tidak. Hasil itu menunjukkan bahwa konfigurasi publik Anda terlihat benar. Kerentanan di sisi server, keamanan akun, dan celah logika bisnis memerlukan pengujian lain.
Sumber
- Baseline Requirements for the Issuance and Management of Publicly-Trusted TLS Server Certificates, version 2.3.1 (terbuka di tab baru), CA/Browser Forum, 4 Oktober 2026
- Ballot SC-081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods (terbuka di tab baru), CA/Browser Forum, 11 April 2025
- Strict-Transport-Security (terbuka di tab baru), MDN Web Docs, terakhir diubah 11 September 2026
- CSP: frame-ancestors (terbuka di tab baru), MDN Web Docs, terakhir diubah 27 Agustus 2026
- X-Content-Type-Options (terbuka di tab baru), MDN Web Docs, terakhir diubah 17 Maret 2026
- Using HTTP cookies (terbuka di tab baru), MDN Web Docs, terakhir diubah 17 September 2026
- Mixed content (terbuka di tab baru), MDN Web Docs, terakhir diubah 15 Agustus 2026
- HTTP Security Response Headers Cheat Sheet (terbuka di tab baru), OWASP Cheat Sheet Series, diakses 22 Oktober 2026
- CVE-2020-11022 (terbuka di tab baru), NIST National Vulnerability Database, diterbitkan 29 April 2020
- CVE-2020-11023 (terbuka di tab baru), NIST National Vulnerability Database, diterbitkan 29 April 2020
- CVE-2019-11358 (terbuka di tab baru), NIST National Vulnerability Database, diterbitkan 20 April 2019
- .jquery (terbuka di tab baru), jQuery API Documentation, diakses 22 Oktober 2026
- Updating core jQuery to version 3, part 2 (terbuka di tab baru), Make WordPress Core, 5 November 2020
- RFC 9116: A File Format to Aid in Security Vulnerability Disclosure (terbuka di tab baru), IETF, April 2022
- RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC) (terbuka di tab baru), IETF, Mei 2026
- Enabling secure connections to your Shopify store (terbuka di tab baru), Shopify Help Center, diakses 22 Oktober 2026
- Security (terbuka di tab baru), Shopify, diakses 22 Oktober 2026
- Hardening WordPress (terbuka di tab baru), WordPress Developer Resources, diakses 22 Oktober 2026
- Penetration testing (glossary) (terbuka di tab baru), NIST Computer Security Resource Center, mengutip NIST SP 800-115 (September 2008), diakses 22 Oktober 2026
Semua panduan
- Checklist halaman produk: penyebab pembeli batal membeliChecklist halaman produk dari riset Baymard dan WebAIM: harga, ongkir dan retur, foto, ulasan, tombol beli di ponsel, pop-up, pencarian, dan keyboard.
- Checklist SEO teknis untuk toko online Shopify dan WooCommerceChecklist SEO teknis toko Shopify dan WooCommerce: noindex, robots.txt, sitemap, title, H1, canonical, data terstruktur Product, Open Graph, alt text.
- Checklist WCAG 2.2 AA untuk aksesibilitas toko onlineChecklist WCAG 2.2 AA toko Shopify dan WooCommerce per jenis halaman: alt text, kontras, label, keyboard, fokus, ukuran target, dan kriteria baru 2.2.