0Pricing
TypeScript Academy · Pelajaran

Rahasia dan Keamanan Jenis

Tangani nilai sensitif tanpa membocorkannya ke dalam jenis.

Rahasia dan Keamanan Jenis adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.

Rahasia Memerlukan Perlakuan Khusus

Kunci API, kata sandi, dan token juga merupakan config, tetapi membocorkannya dalam log atau pesan galat berbahaya. Keamanan tipe dapat membantu mencegah nilai rahasia terekspos secara tidak sengaja.

Masalah Pencatatan yang Tidak Disengaja

Rahasia berupa string biasa dapat tercatat di mana saja secara tidak sengaja, misalnya melalui console.log(config) atau pembuangan galat yang membuat serialisasi seluruh objek config.

const config = { dbPassword: "hunter2" };
console.log(config); // leaks the password

Tipe Secret Bermerek

Tipe bermerek menandai string sebagai rahasia saat kompilasi, sehingga sistem tipe dapat membedakan Secret dari string biasa dan memaksa penanganan yang disengaja.

type Secret = string & { readonly __brand: "Secret" };
function secret(s: string): Secret { return s as Secret; }

Mengapa Pemberian Merek Membantu

Karena Secret tidak dapat ditetapkan ke string biasa tanpa maksud yang jelas, fungsi dapat meminta Secret jika sesuai dan Anda tidak dapat meneruskannya ke tempat yang tidak aman secara tidak sengaja.

function connect(pw: Secret) { /* uses pw */ }
// connect("plain") -> type error; must wrap with secret()

Kelas Pembungkus Secret

Alternatifnya adalah membungkus nilai dalam kelas yang toString dan serialisasinya disamarkan, sehingga bahkan pencatatan yang ceroboh hanya menampilkan pengganti.

class Secret {
  constructor(private readonly value: string) {}
  expose(): string { return this.value; }
  toString() { return "[REDACTED]"; }
}

Menyamarkan saat Serialisasi

Menyesuaikan toJSON memastikan rahasia tidak pernah muncul saat objek diserialisasikan dengan JSON.stringify, jalur kebocoran tidak sengaja yang paling umum.

class Secret {
  constructor(private readonly value: string) {}
  expose() { return this.value; }
  toJSON() { return "[REDACTED]"; }
}
// JSON.stringify({ pw: new Secret("x") }) -> {"pw":"[REDACTED]"}

Hanya Mengekspos Secara Eksplisit

Nilai sebenarnya hanya dapat diakses melalui metode eksplisit seperti expose(). Dengan demikian, setiap titik yang membaca rahasia terlihat dan dapat diaudit dalam kode.

const pw = new Secret("hunter2");
console.log(String(pw)); // [REDACTED]
connectToDb(pw.expose()); // deliberate access

Jauhkan Rahasia dari Tipe yang Luas

Hindari memasukkan string rahasia mentah ke dalam antarmuka config luas yang dicatat seluruhnya. Gunakan tipe Secret agar rahasia disamarkan secara bawaan di mana pun config dicetak.

interface Config {
  host: string;
  dbPassword: Secret; // not a plain string
}

Memuat Rahasia dengan Aman

Bungkus nilai rahasia dari env saat Anda membacanya, sehingga nilai tersebut diberi merek atau dibungkus sejak awal dan tidak pernah beredar sebagai string biasa.

const config = {
  host: process.env.DB_HOST!,
  dbPassword: new Secret(process.env.DB_PASSWORD!),
};

Pertahanan Berlapis

Rahasia pada tingkat tipe mengurangi kebocoran yang tidak disengaja, tetapi tidak menggantikan praktik operasional yang baik: batasi pihak yang dapat membaca env, hindari mencatat isi permintaan, dan bersihkan pelapor galat.

Ringkasan Teknik

Gunakan tipe berpenanda untuk memaksa penanganan yang disengaja, kelas pembungkus dengan toString/toJSON yang menyamarkan nilai, serta expose() yang eksplisit untuk membaca nilainya, sehingga rahasia tidak masuk ke pencatatan dan keluaran terserialisasi.

Pemeriksaan Singkat

Pemeriksaan singkat untuk pelajaran ini.

Rekapitulasi

Lindungi rahasia dengan tipe berpenanda (yang memaksa penanganan secara sengaja) atau kelas pembungkus yang toString/toJSON-nya mengembalikan [REDACTED], dan hanya membuka nilai sebenarnya melalui expose() yang eksplisit. Dengan demikian, rahasia tidak masuk ke pencatatan dan konfigurasi yang terserialisasi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Rahasia dan Keamanan Jenis” gratis?

Ya — teks lengkap “Rahasia dan Keamanan Jenis” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Rahasia dan Keamanan Jenis”?

Tangani nilai sensitif tanpa membocorkannya ke dalam jenis. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai TypeScript Academy?

Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Rahasia dan Keamanan Jenis” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menentukan Jenis Variabel Lingkungan
  2. Konfigurasi yang Tervalidasi Skema
  3. Pelapisan Konfigurasi dan Nilai Bawaan
  4. Rahasia dan Keamanan Jenis
← Kembali ke TypeScript Academy