Obfuscator JavaScript
Obfuskasi meningkatkan biaya untuk membaca kode sumber JavaScript Anda, bukan secara mutlak (tidak ada obfuskasi front-end yang benar-benar antipeluru), tetapi cukup untuk mengurungkan pemeriksaan sekilas dan memperlambat scraping otomatis. Alat ini menerapkan pengodean array string, pengacakan pengidentifikasi, perataan alur kontrol, dan penyisipan kode mati opsional, dengan setiap opsi dapat dipilih sesuai seberapa agresif yang Anda inginkan.
Cara mengobfuskasi JavaScript
-
1
Tempel kode sumber
Kode JS valid apa pun. Jika bergantung pada nama properti global tertentu dari halaman host, tetapkan nama-nama itu sebagai dicadangkan.
-
2
Pilih teknik
Pengodean string (hex / base64), pengacakan pengidentifikasi, perataan alur kontrol, penyisipan kode mati, pembungkus swapertahanan.
-
3
Pilih profil target
Browser (aman untuk ES5, tanpa API Node), Node.js (mengizinkan `require`, `Buffer`), atau rendah (sebagian besar hanya minifikasi).
-
4
Obfuskasi
Alat menghasilkan kode yang telah ditransformasi beserta selisih ukuran. Pengaturan agresif dapat membuat keluaran 3–5 kali lebih besar daripada sumbernya.
Teknik dan biayanya bagi Anda
| Teknik | Meningkatkan usaha penyerang | Biaya saat berjalan | Biaya ukuran |
|---|---|---|---|
| Penggantian nama variabel | Rendah | Dapat diabaikan | Lebih kecil (efek samping minifikasi) |
| Pengodean array string | Sedang | Sangat kecil (satu pencarian per string) | +10–30% |
| Perataan alur kontrol | Tinggi | Terukur (~2–5%) | +50–150% |
| Penyisipan kode mati | Rendah (keamanan semu) | Kecil | +20–50% |
| Pembungkus swapertahanan | Sedang | Pemeriksaan sekali | +5–10% |
| Perlindungan debug | Sedang (mendeteksi DevTools) | Pemeriksaan sekali | +5% |
| VM / virtualisasi (premium) | Sangat tinggi | Besar (5–20x) | +300–500% |
Yang tidak bisa dilindungi obfuskasi
- Rahasia. Konstanta apa pun di kode sumber front-end Anda dapat dibaca jika diberi cukup waktu. Kunci API, rahasia autentikasi, logika penetapan harga, jangan pernah mengandalkan obfuskasi untuk menyembunyikannya. Pindahkan ke sisi server.
- Algoritme dengan keluaran yang dapat diamati. Jika browser bisa menjalankannya, penyerang dengan debugger dapat mengamati setiap masukan dan keluaran. Obfuskasi memperlambatnya; tidak menghentikannya.
- Scraping otomatis dalam skala besar. Anti-scraping bergantung pada deteksi perilaku (fingerprinting, batas laju, CAPTCHA), bukan pada obfuskasi kode sumber.
Kapan obfuskasi sepadan
- Anti-perusakan pada SDK tertanam (lisensi, SDK iklan, klien game).
- Menaikkan biaya untuk menyalin-tempel implementasi pesaing tanpa banyak usaha.
- Mempersulit klasifikasi skrip otomatis bagi scraper berspektrum luas.
Kapan justru merugikan
- Anda sudah punya bundler. Webpack + Terser dalam mode produksi sudah meminifikasi dan mengacak variabel lokal. Menambah lapisan obfuskasi kedua hanya memberi sedikit manfaat dan membengkakkan ukuran bundel.
- Anda mengoptimalkan First Paint / Core Web Vitals. Obfuskasi agresif melipatgandakan bundel tiga kali; itu merugikan FCP dan LCP.
- Anda harus melakukan debug di produksi. Obfuskasi berat membuat jejak tumpukan (stack trace) Sentry hampir tidak berguna tanpa source map yang cocok, dan mengirimkan source map justru menggagalkan obfuskasi.
Kesalahan umum
- Menganggap obfuskasi setara dengan enkripsi. Bukan begitu, ia hanyalah penghambat.
- Mengirimkan source map bersama bundel yang diobfuskasi ke produksi. Itu sepenuhnya menetralkan obfuskasi.
- Mengobfuskasi pustaka pihak ketiga yang sudah Anda muat dari CDN. Anda menanggung penalti ukuran tanpa keuntungan apa pun.
Pertanyaan yang Sering Diajukan
Tidak. Obfuskasi adalah penghambat, bukan gembok. Analis yang gigih dengan debugger akan memulihkan logikanya. Ia menaikkan biaya cukup untuk mengurungkan pemeriksaan sekilas dan sebagian besar scraper otomatis, tetapi itu bukan keamanan.
Jika Anda mengakses properti secara dinamis (obj["field_name"], Object.keys(obj)) atau bergantung pada nama fungsi/kelas tertentu untuk halaman host, tambahkan nama-nama itu ke daftar yang dicadangkan. Tanpa itu, penggantian nama properti dapat merusak integrasi eksternal.
Simpan kode sumber aslinya. Obfuscator adalah transformasi satu arah; Anda tidak dapat memulihkan aslinya secara persis dari keluaran yang diobfuskasi, hanya perkiraan yang dapat dibaca.
Obfuskasi ringan menambah ~10–30%. Perataan alur kontrol ditambah array string menambah 50–150%. Pengaturan terberat dapat melipatgandakan ukuran hingga tiga kali. Periksa penghitung ukuran keluaran sebelum mengirimkan.
Alat Terkait
Referensi Tabel ASCII
Tabel ASCII lengkap dari 0 sampai 127 dengan desimal, heksadesimal, oktal, biner, dan referensi karakter numerik HTML untuk setiap karakter, termasuk kode kontrol seperti NUL, LF, dan DEL.
Referensi Karakter HTML
Daftar entitas HTML yang dapat dicari, beserta kode bernama dan kode numeriknya, serta fitur salin dengan satu klik untuk karakter khusus dan simbol.
Referensi pintasan papan ketik
Cari pintasan bawaan terdokumentasi untuk VS Code, Chrome, dan Bash dengan GNU Readline di macOS, Windows, dan Linux.
Pemformat HTML
Format HTML secara lokal di browser dengan inden dua atau empat spasi. HTML tidak diunggah atau divalidasi.
Generator EditorConfig
Buat file .editorconfig dengan gaya dan ukuran indentasi, akhir baris, charset, dan aturan spasi Anda untuk format yang konsisten di berbagai IDE dan editor.
Validator Email
Validasi alamat email: pemeriksaan sintaks RFC 5322, pengecekan live record MX, serta detail bagian lokal, domain, dan panjang. Tidak ada email yang dikirim.
Alat ini tersedia dalam bahasa lain
- JavaScript-obfuskerare [SV]
- مُبهِّم JavaScript [AR]
- JavaScript-obfuscator [NL]
- Obfuskator JavaScript [PL]
- Trình làm rối mã JavaScript [VI]
- เครื่องมือปิดบังโค้ด JavaScript [TH]
- Ofuscador de JavaScript [ES]
- JavaScript難読化ツール [JA]
- Obfuscateur JavaScript [FR]
- JavaScript-Obfuscator [DE]
- Ofuscador de JavaScript [PT]
- JavaScript 난독화 도구 [KO]
- Обфускатор JavaScript [RU]
- JavaScript Kod Gizleme Aracı [TR]
- JavaScript混淆器 [ZH]
- JavaScript Obfuscator [EN]
- Offuscatore JavaScript [IT]