Selama empat chapter terakhir kita memakai pelindung yang ditawarkan HTML: rel="noopener noreferrer" pada link, sandbox dan referrerpolicy pada iframe, serta escape entitas saat render. Chapter penutup section ini menegaskan batas dari seluruh pelindung itu: HTML murni bukan lapisan keamanan. Kita tinjau apa yang tidak dapat dilakukan HTML, membuktikan bahwa sumber halaman selalu terbuka, lalu memetakan lapisan yang memegang keamanan sesungguhnya. Pemahaman batas inilah yang mencegah kita menaruh kepercayaan di tempat yang keliru.

Yang Tidak Diberikan HTML #

Lima hal berikut berada di luar kemampuan HTML, berapa pun atribut yang kita tulis:

  • Tidak ada autentikasi: markup tidak menyimpan status login; keputusan “siapa pengunjung ini” selalu milik server.
  • Tidak ada enkripsi: HTML tidak mengenkripsi apa pun; enkripsi jalur adalah tugas HTTPS.
  • Sumber selalu terbuka: browser wajib menerima seluruh markup untuk merender halaman, sehingga tidak ada mekanisme menyembunyikannya.
  • Validasi klien bukan keamanan: pemeriksaan browser mudah dilewati; rincian lengkapnya ada pada chapter Batasan Validasi HTML.
  • Tidak ada perlindungan elemen: tidak ada atribut yang mencegah pengunjung membuka DevTools dan mengubah DOM.

Sumber Halaman Selalu Terbuka #

Browser menampilkan halaman berdasarkan teks markup yang diterimanya apa adanya. Setiap pengunjung dapat membuka teks itu lewat menu view source atau panel Elements, termasuk komentar HTML yang ikut terkirim dari server. Karena itu, komentar HTML bukan tempat menyimpan apa pun yang sifatnya rahasia. Contoh berikut sengaja memperlihatkan kesalahan yang sering dijumpai:

<!doctype html>
<html lang="id">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Contoh Kesalahan: Rahasia di Komentar HTML</title>
</head>
<body>
  <!-- CATATAN UNTUK TIM: contoh ini sengaja memperlihatkan kesalahan.
       Jangan menaruh kredensial di HTML, termasuk di komentar.
       Nilai di bawah hanyalah penampung latihan, bukan kunci sungguhan. -->
  <h1>Dasbor Integrasi</h1>
  <!-- Kredensial integrasi: api_key = YOUR_API_TOKEN -->
  <p>Dasbor ini menyambungkan layanan statistik dengan kunci integrasi.</p>
</body>
</html>

Output yang Dihasilkan:

text
Dengan mengetik view-source: sebelum alamat halaman, komentar
beserta baris api_key tampil apa adanya di browser.

Mari kita telaah kesalahannya:

  1. Komentar pembuka: catatan untuk tim ikut terkirim ke setiap pengunjung; isi catatan itu bukan lagi rahasia.
  2. Baris api_key = YOUR_API_TOKEN: nilainya hanyalah penampung latihan, tetapi pola kesalahannya nyata — kredensial apa pun yang ditulis di posisi itu terbaca semua orang.
  3. Sisa markup: tidak ada satu atribut pun yang dapat menyelamatkan baris itu; penangkalnya satu — jangan menaruh rahasia di HTML.

Pemetaan Lapisan Keamanan #

Karena HTML tidak memikul keamanan, keamanan nyata berada di lapisan lain yang bekerja bersamanya. Tabel berikut merangkum pembagian perannya:

LapisanPeran utamaAndil HTML
HTTPSmengenkripsi jalur browser dan servermenautkan dengan alamat ber-skema https
Serverautentikasi, otorisasi, pemeriksaan ulang datamenyajikan markup sesuai status pengunjung
Mesin templatemeng-escape data saat rendermemberi konteks elemen yang benar
Header keamananCSP dan X-Frame-Options membatasi sumber dan sematanmenyertai dengan rel, sandbox, referrerpolicy
HTMLstruktur dan makna kontenpelindung kecil pada atribut, bukan lapisan pengaman

Pola berlapis semacam ini kita kenal sebagai defense in depth: kegagalan satu lapis masih tertutup oleh lapis di atasnya. HTML berdiri di lapisan terbawah dengan andil yang kecil namun nyata — atribut pelindung pada link dan iframe. Sisanya, seperti enkripsi dan keputusan siapa boleh melihat apa, berada di luar wewenang markup.

Dengan pemetaan itu, keputusan desain menjadi jelas: kepercayaan diberikan kepada server dan protokol, sementara HTML diberi tugas yang sesuai kapasitasnya. Batas ini menutup section Security dengan pondasi yang sehat — kita memakai setiap atribut pelindung tanpa menuntut lebih dari kemampuannya. Perjalanan belajar berlanjut ke section Arsitektur Halaman Web, yang membahas cara merancang struktur halaman secara utuh, dimulai dari merancang struktur halaman itu sendiri.

Referensi resmi untuk pendalaman:

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

kesalahan-rahasia.html

Unduh berkas
html
<!doctype html>
<html lang="id">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Contoh Kesalahan: Rahasia di Komentar HTML</title>
</head>
<body>
  <!-- CATATAN UNTUK TIM: contoh ini sengaja memperlihatkan kesalahan.
       Jangan menaruh kredensial di HTML, termasuk di komentar.
       Nilai di bawah hanyalah penampung latihan, bukan kunci sungguhan. -->
  <h1>Dasbor Integrasi</h1>
  <!-- Kredensial integrasi: api_key = YOUR_API_TOKEN -->
  <p>Dasbor ini menyambungkan layanan statistik dengan kunci integrasi.</p>
</body>
</html>