Pada episode ini kita akan menyiapkan wget untuk produksi: HTTPS dan verifikasi sertifikat tanpa jalan pintas, verifikasi checksum dan GPG, pembatasan crawl rekursif yang berlebihan, pengelolaan .netrc yang aman, serta checklist keamanan untuk download otomatis.

Di episode 18 kalian belajar membaca kegagalan, dan di episode 20 kalian melihat wget bekerja di dalam Docker, skrip provisioning, dan pipeline CI. Sekarang tibalah pertanyaan paling penting: apakah download kalian aman untuk produksi? Di laptop, sebuah flag yang ceroboh hanya membuat download kalian sendiri gagal. Di server produksi — atau di dalam pipeline yang melayani ratusan pengguna — kesalahan yang sama bisa menjadi lubang keamanan yang nyata.
Konsep kuncinya: setiap flag wget adalah keputusan keamanan. Default wget sudah cukup aman, tetapi banyak kebiasaan "biar cepat selesai" — mematikan verifikasi sertifikat, tanpa verifikasi checksum, crawl tanpa batas — justru menciptakan celah. Episode 21 ini adalah checklist hardening: kebiasaan yang wajib, teknik yang benar, dan jebakan yang harus kalian hindari.
Sejak wget 1.10, verifikasi sertifikat adalah default. Itu berarti setiap download HTTPS yang berhasil hanya terjadi jika sertifikat server valid dan ditandatangani CA yang dipercaya sistem. Jika verifikasi gagal, wget keluar dengan kode 5 — dan di episode 18 kita sudah sepakat untuk tidak pernah mematikan verifikasi.
# JANGAN lakukan ini di produksi
wget --no-check-certificate https://example.com/file.zipAlih-alih mematikan verifikasi, perbaiki apa yang bermasalah. Jika CA belum dikenal sistem, tunjukkan bundle-nya secara eksplisit:
wget --ca-certificate=/etc/ssl/certs/ca-certificates.crt \
https://example.com/file.zipPeriksa juga tanggal sistem — kesalahan umum yang membuat sertifikat "valid" tampak kedaluwarsa. Dan untuk crawl, gunakan --https-only agar wget tidak pernah ikut turun ke HTTP biasa saat menemukan link campuran.
Warning
--no-check-certificate bukan sekadar "kurang rapi" — itu membuka pintu untuk man-in-the-middle. Siapa pun di jalur jaringan kalian (ISP, proxy, wifi publik, penyerang) bisa menyisipkan sertifikat palsu dan membaca atau mengganti seluruh isi download. Jika sebuah server memaksa kalian memakai flag ini, curigai server itu lebih dulu — bukan kunci yang harus dibuang.
Download yang sukses secara teknis belum tentu aman. File bisa rusak di tengah jalan, atau — lebih berbahaya — disusupi oleh penyerang yang menguasai jaringan. Karena itu produksi tidak pernah berhenti di download: selalu verifikasi.
wget https://example.com/app-1.2.3.tar.gz
wget https://example.com/SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
gpg --verify app-1.2.3.tar.gz.sig app-1.2.3.tar.gzsha256sum -c membandingkan checksum file dengan yang tercantum di daftar resmi, dan gpg --verify mengautentikasi tanda tangan digital rilisnya. Checksum membuktikan file tidak berubah; tanda tangan GPG membuktikan file berasal dari sumber yang sah. Dua lapis itu adalah standar emas distribusi perangkat lunak — dan keduanya mudah dipasang di samping wget.
Crawl tanpa batas di produksi adalah resep bencana: server kalian bisa dianggap sebagai penyerang, situs target bisa down, dan bandwidth habis untuk data yang tidak diinginkan. Batasi setiap dimensi — kedalaman, cakupan, dan kecepatan:
wget -r -l 3 -np --max-redirect 5 \
--wait=2 --random-wait --limit-rate=500k \
https://docs.example.com/guide/Mari bedah keputusan di balik setiap flag:
-l 3 — berhenti setelah tiga tingkat link; tanpa ini, crawl bisa menyusuri internet tanpa henti.-np — jangan naik ke direktori induk; crawl tetap di dalam area yang diizinkan.--max-redirect 5 — batasi redirect agar request tidak dibawa berkeliling.--wait=2 --random-wait — jeda antar-request dengan pola acak, menghormati beban server.--limit-rate=500k — pagari bandwidth, jangan sampai menghabiskan koneksi produksi.Important
Jika situs target memblokir crawler, jangan memaksakan -e robots=off tanpa izin tertulis. Batasi pula hasil akhirnya: siapkan ruang disk yang jelas untuk output, dan pertimbangkan menulis log dengan -o agar setiap langkah crawl bisa dipertanggungjawabkan jika terjadi masalah.
Berikut kebiasaan-kebiasaan yang wajib menjadi refleks ketika wget dijalankan otomatis — di cron, di CI, atau di skrip server.
.netrc dengan Izin Ketatwget membaca ~/.netrc untuk mengambil kredensial FTP dan HTTP secara otomatis. Ini nyaman, tapi file itu menyimpan kata sandi dalam teks polos — jadi izinnya wajib dijaga:
machine ftp.example.com
login arman
password rahasiachmod 600 ~/.netrcIzin 600 memastikan hanya pemiliknya yang bisa membaca. Jangan pernah meng-commit file ini ke repository, dan jika perlu, hasilkan isinya dari secret manager saat deploy — bukan menyimpannya sebagai file statis di image.
Kesalahan paling umum di dunia nyata adalah menulis kredensial langsung di command line. Masalahnya bukan hanya riwayat shell — isi argumen sebuah proses terlihat oleh semua user lewat ps selama proses itu berjalan. Di CI, command line bahkan tercatat di log pipeline.
# Password muncul di ps, riwayat shell, dan log CI
wget --http-user=arman --http-password=sandirahasia \
https://example.com/file.zipGunakan .netrc (dengan izin 600), atau jika perlu menjalankan program eksternal untuk mengambil password, pakai --use-askpass — wget memanggil command itu untuk mendapatkan kredensial tanpa menyentuh argumen.
Perjalanan 1.24.5 menuju 1.25.0 yang kita bahas di episode 19 menutup celah keamanan nyata, dan perawatan keamanan itu terus berlanjut. wget tidak memperbarui dirinya sendiri — tidak ada auto-update. Versi yang terpasang di server kalian adalah versi yang bertanggung jawab atas keamanan download kalian.
wget --versionJadikan pemeriksaan versi bagian dari rutinitas: apt update && apt upgrade wget di distro Debian/Ubuntu, atau dnf update wget di RHEL/Fedora. Kebiasaan kecil inilah yang menutup celah sebelum dieksploitasi.
Download otomatis yang berjalan tanpa pengawasan adalah utang. Beri mereka jejak yang bisa diaudit dengan -o, lalu tangani kegagalan secara eksplisit:
wget -o /var/log/mirror.log -r -l 2 -np \
https://example.com/
if [ $? -ne 0 ]; then
echo "mirror gagal" | mail -s "wget alert" admin@example.com
fiLog ini menjawab pertanyaan "apa yang terjadi kemarin pukul 02:00?" dalam satu detik — jauh lebih berharga daripada menebak dari ingatan. Periksa juga exit code secara eksplisit: 4 untuk network, 5 untuk SSL, 8 untuk server error. Alarm yang baik adalah alarm yang tahu kategori masalahnya sejak awal.
Episode 21 menutup sisi keamanan dengan lima pilar: HTTPS dengan verifikasi sertifikat tanpa kompromi, verifikasi checksum dan GPG setelah download, pembatasan crawl rekursif yang berlebihan, checklist keamanan untuk download otomatis — .netrc dengan izin 600, kredensial yang tidak menyentuh argumen, versi yang selalu diperbarui, dan log yang selalu dipantau.
Inti yang harus dibawa pulang: keamanan wget bukan soal fitur, tapi soal kebiasaan. Default-nya sudah aman; tugas kalian adalah tidak merusaknya demi kenyamanan, dan menegaskan batas-batasnya secara eksplisit — di setiap baris skrip produksi.
Di episode 22 — episode terakhir — kita akan menutup seluruh perjalanan: rekap, best practice & refleksi akhir dari 23 episode Belajar Wget. Sampai jumpa!