Topik wawancara representatif

Bagaimana cara Anda mencegah masalah keamanan terkait teks dua arah (bidirectional) dan karakter confusable pada Unicode?

UmumSulit
Tim Redaksi Offer.ccDipublikasikan Diperbarui

Pertanyaan

Sebuah tinjauan kode (code review), nama pengguna, atau tampilan domain memuat teks Unicode yang terlihat sama tetapi berbeda dalam penyimpanan. Jelaskan algoritma dua arah dan deteksi confusable, lalu rancang alur mitigasi yang dapat diaudit.

Perintah dan konteks

Alat peninjau kode, sistem akun, atau tampilan domain menerima karakter yang secara visual serupa, atau kontrol dua arah yang mengubah urutan pembacaan. Jelaskan perbedaan antara urutan logis dan urutan tampilan, bedakan deteksi confusable dari penegakan kebijakan, dan rancang alur yang mempertahankan teks multibahasa yang sah.

Hal yang dievaluasi oleh pewawancara

  • Apakah Anda memahami bahwa algoritma dua arah Unicode mengubah urutan presentasi sementara urutan titik kode (code-point) logis tetap utuh.
  • Apakah Anda dapat membedakan antara override, isolate, skrip campuran, dan deteksi confusable.
  • Apakah Anda mengetahui bahwa skeleton UTS #39 adalah nilai perantara yang tidak boleh ditampilkan atau digunakan kembali di berbagai versi Unicode.
  • Apakah validasi input, presentasi, audit, perbandingan otorisasi, dan pembaruan versi dirancang sebagai pemisahan perhatian (separate concerns).

Pertanyaan klarifikasi yang perlu diajukan

Pertama, identifikasi apakah bidang tersebut berupa kode sumber, pengenal login, domain terinternasionalisasi, teks pencarian, atau prosa biasa. Konfirmasikan skrip yang diizinkan, bahasa target, dan dukungan tampilan. Kemudian tanyakan apakah sebuah temuan akan memblokir, memerlukan tinjauan, memberi peringatan, atau hanya dicatat dalam log. Konfirmasikan versi data Unicode, retensi teks asli, dan tingkat positif palsu (false-positive rate) yang dapat diterima.

Jawaban 30 detik

Teks Unicode memiliki urutan logis dan urutan tampilan. UAX #9 menyusun ulang presentasi berdasarkan properti arah, tetapi kontrol bidi tidak mengubah perbandingan, penguraian (parsing), atau analisis numerik. Kebijakan keamanan harus membatasi kontrol yang berbahaya dan menggunakan UTS #39 untuk pemeriksaan skrip dan confusable. Skeleton adalah kunci perbandingan perantara berversi, bukan teks tampilan. Pertahankan teks asli, lampirkan diagnostik berversi, blokir atau tinjau pengenal berisiko tinggi, dan gunakan aturan perbandingan persis dari protokol bidang untuk otorisasi.

Pembahasan mendalam langkah demi langkah

1. Memisahkan urutan logis dari urutan tampilan

Ketika bahasa Arab atau Ibrani bercampur dengan angka, UAX #9 menghitung urutan tampilan dari tipe arah kuat (strong), lemah (weak), dan netral (neutral). Override seperti RLO dan LRO memaksa arah, sementara isolate membatasi bagaimana segmen dalam memengaruhi lingkungan sekitarnya. Rendering tidak menulis ulang urutan titik kode di memori dan tidak boleh dijadikan aturan penguraian atau perbandingan.

2. Mengidentifikasi risiko kontrol bidi dan skrip campuran

Pengenal terstruktur seperti kode sumber, nama file, dan nama akun jarang membutuhkan kontrol arah yang sembarangan. Lapisan input dapat menolak atau menandai karakter Bidi_Control; lapisan tampilan dapat menampilkan escape atau batas eksplisit. Kebijakan skrip campuran harus mengikuti kumpulan bahasa yang diizinkan oleh bisnis, bukan memperlakukan setiap karakter non-ASCII sebagai ancaman berbahaya.

3. Menerapkan deteksi confusable berversi

UTS #39 menyediakan data confusables dan mekanisme skeleton untuk pemeriksaan kemiripan visual. Kemiripan (confusability) bergantung pada font, skrip, dan konteks; ini bukan relasi kesetaraan mutlak. Simpan teks asli, versi Unicode, analisis skrip, dan hasil temuan. Hitung ulang setelah pembaruan data dan tinjau tabrakan (collision) baru, sementara otorisasi tetap menggunakan aturan perbandingan persis dari protokol.

Contoh jawaban berkualitas tinggi

Saya akan memulainya dengan mengklasifikasikan risiko bidang tersebut. Untuk pengenal terstruktur seperti kode sumber, nama pengguna, dan domain, saya akan mempertahankan teks asli dan membatasi skrip serta kontrol arah; prosa multibahasa biasa harus tetap mempertahankan tata letak dua arah yang sah. UAX #9 menentukan urutan tampilan, sementara kontrol bidi tidak boleh mengubah penguraian, perbandingan, atau analisis numerik, sehingga alat audit harus menampilkan urutan titik kode logis maupun output yang dirender. Deteksi akan menggabungkan tingkat pembatasan UTS #39, aturan skrip campuran, dan data confusables. Skeleton adalah kunci perantara untuk satu versi data Unicode: ini bukan teks tampilan maupun pengenal permanen lintas versi. RLO, campuran skrip yang tidak biasa, atau tabrakan dengan pengenal berisiko tinggi yang sudah ada harus diblokir atau memerlukan tinjauan; prosa biasa dapat menghasilkan peringatan. Perbandingan dan otorisasi harus menggunakan aturan normalisasi, huruf besar/kecil (case), dan pengkodean dari protokol bidang alih-alih kemiripan visual. Pada pembaruan data Unicode, hitung ulang temuan secara massal (batch) dan tinjau tabrakan agar perubahan dapat dilacak dan dibatalkan jika diperlukan.

Kesalahan umum

  • Menganggap urutan tampilan sebagai urutan string yang disimpan.
  • Mengklaim bahwa menghapus semua karakter kanan-ke-kiri dapat menyelesaikan masalah, yang justru merusak teks bahasa Arab atau Ibrani yang sah.
  • Memperlakukan skeleton sebagai hash yang stabil, nilai tampilan, atau bidang protokol lintas versi.
  • Hanya memeriksa ASCII dan mengabaikan font, skrip, tanda kombinasi, dan konteks.
  • Menggunakan kemiripan visual untuk otorisasi, tanda tangan, atau keunikan alih-alih aturan perbandingan persis dari bidang tersebut.

Pertanyaan lanjutan dan jawabannya

Mengapa tidak menghapus kontrol bidi dari setiap input?

Karakter tersebut dapat memfasilitasi penipuan, tetapi dokumen dan tata letak yang sah mungkin memerlukan kontrol arah. Pilih tindakan pemblokiran, escaping, isolasi, atau peringatan berdasarkan risiko bidang dan platform target, serta pertahankan bukti yang dapat diaudit.

Bisakah skeleton langsung dijadikan nama pengguna?

Tidak. Skeleton adalah bentuk deteksi perantara dan berubah mengikuti data Unicode. Pertahankan teks asli dan kunci perbandingan yang ditentukan protokol; gunakan skeleton untuk diagnosis tabrakan atau tinjauan.

Bagaimana cara mengurangi positif palsu pada data multibahasa?

Tentukan kumpulan bahasa dan skrip yang diizinkan, lalu gabungkan data bahasa CLDR, konteks bidang, dan tinjauan manual oleh manusia. Berikan peringatan pada prosa biasa, sambil menerapkan pembatasan yang lebih ketat pada pengenal login, domain, dan pengenal kode.

Sumber publik

Pertanyaan terkait