Header Saja Tidak Cukup untuk Menembus WAF Cloudflare Modern
Sekadar memanipulasi header tidak lagi bisa menembus WAF modern seperti Cloudflare, library tls-client dan fhttp dibutuhkan untuk fingerprint TLS (JA3) dan protokol HTTP/2 browser asli.

Dalam dunia web scraping dan otomasi, kita sering mendapati situasi di mana request tetap diblokir (403 Forbidden) meski sudah menggunakan
User-Agent browser terbaru dan Cookie yang valid.Catatan Penting: Fenomena ini terjadi karena firewall modern seperti Cloudflare telah bergeser dari sekadar validasi data di layer HTTP menuju analisis mendalam pada level protokol.
Artikel ini membedah alasan teknis di balik kegagalan library standar seperti
net/http pada Go dan bagaimana teknik TLS/HTTP2 fingerprinting menjadi penentu keberhasilan sebuah request.Batasan Validasi Header HTTP
Pandangan umum dalam pengembangan scraper sering kali terhenti pada manipulasi header. Asumsinya sederhana: jika identitas client (
User-Agent) dan kredensial (Cookie) sesuai dengan browser asli, maka request akan lolos.Namun, WAF kelas enterprise bekerja dengan cara mengamati sidik jari koneksi yang terjadi jauh sebelum paket HTTP pertama dikirimkan. Jika
User-Agent Anda mengaku sebagai Firefox namun profil koneksi di bawahnya terlihat seperti pustaka otomasi, sistem akan langsung menjatuhkan vonis pemblokiran.Layer 1: TLS Fingerprinting dan Mekanisme JA3
Setiap koneksi HTTPS diawali dengan proses TLS Handshake. Di sinilah identitas asli client sering kali terbongkar melalui tanda tangan digital yang disebut JA3.
Cara Kerja JA3:
Saat melakukan Client Hello, client mengirimkan daftar elemen berikut yang kombinasi uniknya membentuk sidik jari JA3:
- Cipher Suites
- TLS Extensions
- Elliptic Curves
Library standar Go memiliki urutan extensions yang sangat spesifik dan statis. Hal ini sangat kontras dengan browser asli (seperti Firefox atau Chrome) yang memiliki urutan extensions jauh lebih kompleks dan selalu berubah di setiap versinya. Cloudflare membandingkan JA3 ini dengan database browser asli; jika terjadi ketidaksesuaian (mismatch), request akan langsung dianggap sebagai bot.
Layer 2: Analisis Protokol HTTP/2 dan Pseudo-Headers
Setelah jalur TLS aman terjalin, client akan diuji kembali pada layer HTTP/2. Protokol ini menggunakan sistem binary framing yang sangat sensitif terhadap urutan.
Pengaruh Urutan Pseudo-Headers:
HTTP/2 menggunakan pseudo-headers yang dimulai dengan tanda titik dua (colon), seperti
:method, :path, :authority, dan :scheme.- Browser Asli: Memiliki urutan pengiriman pseudo-headers yang unik dan konsisten.
- Library
net/http(Go): Memiliki standar pengurutan internal yang tidak dapat diubah melalui API standar.
Perbedaan satu posisi pseudo-header saja sudah cukup bagi firewall modern untuk mendeteksi bahwa request tersebut tidak datang dari browser yang diklaim.
Layer 3: Konsistensi Casing Header dan Canonicalization
Satu detail kecil yang sering terabaikan adalah otomatisasi casing (penggunaan huruf besar/kecil) pada header. Library standar Go secara otomatis melakukan transformasi Canonical-Format (misalnya, mengubah
user-agent menjadi User-Agent).Pada HTTP/2, banyak browser modern mengirimkan semua nama header dalam format huruf kecil (lowercase). Jika sistem keamanan mendeteksi transformasi casing yang tidak lazim dilakukan oleh browser asli, hal ini menjadi indikator kuat adanya aktivitas bot.
Solusi: Implementasi Mimikri Protokol Secara Presisi
Untuk melewati sistem keamanan ini, client harus memiliki kontrol penuh mulai dari handshake TLS hingga penyusunan frame HTTP/2. Inilah mengapa penggunaan library pihak ketiga menjadi krusial.
Rekomendasi Library:
- bogdanfinn/fhttp: Merupakan fork kustom dari
net/httpbawaan Go. Library ini memberikan fleksibilitas untuk mengatur urutan pseudo-headers secara manual agar identik dengan profil browser target, serta mampu mengirimkan header tanpa paksaan transformasi casing (No Canonicalization).
- bogdanfinn/tls-client: Dibangun di atas
fhttp, library ini menyediakan profil browser bawaan (sepertiFirefox_117,Chrome_120, dll.) yang secara otomatis melakukan tuning pada layer TLS agar menghasilkan sidik jari JA3 yang identik dengan browser asli.
Hasil Validasi Eksperimental
Melalui pengujian pada portal dengan proteksi WAF tinggi, didapatkan data perbandingan sebagai berikut:
Metode Library | Status HTTP | Analisis Hasil |
net/http Standar | 403 Forbidden | Kegagalan terjadi karena fingerprint TLS (JA3) terbaca sebagai library otomasi. |
tls-client + fhttp | 200 OK | Request diterima karena sidik jari TLS dan urutan frame HTTP/2 berhasil meniru profil browser target secara presisi. |
Kesimpulan: Eksperimen ini membuktikan bahwa strategi bypass WAF modern saat ini sangat bergantung pada kemampuan client untuk melakukan mimikri protokol secara utuh pada seluruh lapisan komunikasi.
Penulis menyusun riset ini untuk tujuan edukasi mengenai evolusi keamanan protokol web dan metoditas implementasi client-side mimicry.