🔐
← Kembali ke Panduan

Encoding Base64 Aman URL: Apa Itu dan Mengapa Penting

· Tag: base64, url-safe, base64url, jwt, encoding, web-development, api

Apa Itu Encoding Base64 Aman URL?

Encoding Base64 aman URL (juga disebut Base64url) adalah varian dari Base64 standar yang mengganti karakter yang memiliki arti khusus dalam URL dan nama file dengan alternatif yang aman. Base64 standar menggunakan + dan / sebagai bagian dari alfabet 64 karakternya, ditambah = untuk padding, dan ketiganya bermasalah dalam URL, string kueri, dan jalur file.

Base64url menyelesaikan ini dengan dua substitusi sederhana:

| Base64 Standar | Base64 Aman URL | |----------------|-----------------| | + (plus) | - (minus) | | / (garis miring) | _ (garis bawah) | | = (padding) | dihilangkan (biasanya) |

Mengapa Base64 Standar Merusak URL

Ketika string yang di-encode Base64 yang berisi + atau / muncul di URL, perilaku browser dan server menjadi tidak dapat diprediksi.

Masalah +

Dalam string kueri URL, karakter + diinterpretasikan sebagai spasi. Perilaku ini berasal dari spesifikasi application/x-www-form-urlencoded dan menyebabkan data yang didekode berisi spasi yang tidak diharapkan.

Misalnya, string Base64 seperti Pj4+Pz8/Pw== berisi karakter +. Jika ini muncul di parameter URL ?token=Pj4+Pz8/Pw==, server akan melihat ?token=Pj4 Pz8/Pw==+ menjadi spasi.

Masalah /

Dalam jalur URL, karakter / adalah pemisah jalur. String Base64 seperti ab/CD+Ef== berisi / yang akan diinterpretasikan sebagai tingkat direktori. Jika ini muncul di segmen URL, baik klien maupun server dapat salah menginterpretasikan struktur.

Masalah =

Karakter = digunakan untuk pasangan kunci-nilai dalam string kueri. = di akhir seperti di ?data=SGVsbG8= bisa ambigu — apakah = tersebut bagian dari padding Base64 atau sintaks parameter kueri?

Meskipun percent-encoding dapat memperbaiki masalah ini (+ menjadi %2B, / menjadi %2F), ini memperbesar panjang string dan mempersulit debugging. Base64url adalah solusi yang lebih bersih.

Cara Kerja Base64url

Base64url secara formal didefinisikan dalam RFC 4648 Bagian 5. Ini menggunakan algoritma yang persis sama dengan Base64 standar — 3 byte menjadi 4 karakter — tetapi dengan substitusi satu karakter pada posisi 62 dan 63 dari alfabet:

  • Indeks alfabet 62: +- (minus)
  • Indeks alfabet 63: /_ (garis bawah)

Padding (=) biasanya dihapus, karena dapat disimpulkan dari panjang string saat decoding. String Base64url selalu merupakan komponen URL yang valid tanpa escaping tambahan.

Sebelum dan Sesudah

Berikut adalah tampilan data biner yang sama dalam kedua format:

Standar:   Pj4+Pz8/Pw==
Aman URL:  Pj4-Pz8_Pw

Di Mana Base64url Digunakan

JSON Web Token (JWT)

JWT adalah pengguna Base64url yang paling menonjol. Setiap JWT terdiri dari tiga bagian — header, payload, dan signature — masing-masing di-encode Base64 aman URL dan dipisahkan oleh titik:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNqP0m2iTgCjD0

Perhatikan tanda hubung dan garis bawah — tidak ada tanda plus atau garis miring. Jika JWT menggunakan Base64 standar, token akan rusak ketika diteruskan sebagai parameter URL, yang merupakan cara paling umum penggunaannya dalam aplikasi web.

OAuth dan OpenID Connect

Baik OAuth 2.0 maupun OpenID Connect mengandalkan JWT untuk token akses dan token ID, menjadikan encoding Base64url fundamental untuk autentikasi modern. Alur authorization code, implicit flow, dan client credentials flow semuanya mentransmisikan token yang menggunakan Base64url.

API Web dan Parameter Kueri

Banyak API REST dan GraphQL menerima data yang di-encode Base64 dalam parameter kueri untuk kursor paginasi, filter, atau payload yang di-encode. Base64url memastikan parameter ini bekerja dengan benar tanpa encoding URL tambahan.

Contoh dunia nyata — paginasi kursor API:

GET /api/users?cursor=MjAyNC0wMS0xNVQxMDozMDowMFo

API GitHub menggunakan pola persis ini untuk paginasi set hasil besar.

Nama File dan Penyimpanan File

String Base64url menjadi nama file yang aman karena tidak mengandung pemisah jalur (/), tidak ada karakter khusus yang membingungkan sistem file, dan tidak ada karakter yang tidak valid di Windows (:, *, ?, dll.).

Content Delivery Network dan Kunci Cache

CDN dan lapisan caching sering menggunakan nilai yang di-encode Base64url sebagai kunci cache. Base64 standar dengan / akan membuat hierarki direktori palsu di namespace cache, yang mengarah ke kunci yang ambigu.

Mengonversi Antara Base64 Standar dan Base64url

Mengonversi antara kedua varian sangat mudah dalam bahasa apa pun:

JavaScript

// Standard Base64 to URL-safe Base64
function base64ToBase64url(base64) {
  return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

// URL-safe Base64 to Standard Base64
function base64urlToBase64(base64url) {
  let result = base64url.replace(/-/g, '+').replace(/_/g, '/');
  // Restore padding
  while (result.length % 4) {
    result += '=';
  }
  return result;
}

Node.js

Node.js menyediakan dukungan Base64url native sejak versi 15.7.0:

// Encode to Base64url
const encodedUrl = Buffer.from('Hello, world!').toString('base64url');
console.log(encodedUrl);
// Output: SGVsbG8sIHdvcmxkIQ

// Decode from Base64url
const decoded = Buffer.from(encodedUrl, 'base64url').toString('utf-8');
console.log(decoded);
// Output: Hello, world!

Python

import base64

# Encode to Base64url
encoded = base64.urlsafe_b64encode(b"Hello, world!")
print(encoded.decode())
# Output: SGVsbG8sIHdvcmxkIQ==

# Decode from Base64url
decoded = base64.urlsafe_b64decode(encoded)
print(decoded.decode())
# Output: Hello, world!

Kapan Menggunakan Base64 Standar vs Base64url

Gunakan Base64 Standar Ketika:

  • Encoding lampiran email (standar MIME memerlukannya)
  • Menghasilkan data URL untuk penyematan HTML/CSS
  • Menyimpan data di database di mana keamanan URL tidak relevan
  • Berinteraksi dengan sistem lama yang mengharapkan Base64 standar

Gunakan Base64url Ketika:

  • Membuat atau mem-parse token JWT
  • Meneruskan data yang di-encode dalam parameter kueri URL atau segmen jalur
  • Menghasilkan nama file dari data biner
  • Membuat kunci cache atau pengidentifikasi
  • Bekerja dengan token OAuth atau OpenID Connect

Coba Encoding Base64 Aman URL Online

Gunakan encoder dan decoder Base64 online gratis kami untuk mengonversi antara format Base64 standar dan Base64 aman URL. Tempel data Anda, pilih varian Anda, dan dapatkan hasilnya secara instan.