Secure Text Entry — apa itu, perlindungan input dan sandi di Android

Penulis: IT Sectr Diterbitkan: 2026-07-07 Waktu membaca: 9 mnt

Secure Text Entry — adalah mode input teks di Android di mana karakter yang dimasukkan ditampilkan dalam bentuk tersembunyi (titik atau bintang) sebagai ganti karakter sebenarnya. Mode ini digunakan untuk bidang input sandi, kode PIN, kode CVV, dan informasi rahasia lainnya. Secure Text Entry tidak hanya melindungi data dari penyadapan visual, tetapi juga mencegah kebocoran melalui tangkapan layar, rekaman layar, dan fungsi koreksi otomatis. Menurut Android Security Best Practices (2026), input tersembunyi adalah persyaratan wajib untuk aplikasi yang memproses data autentikasi pengguna.

Poin Utama

  • Secure Text Entry — mode input tersembunyi yang menampilkan titik sebagai ganti karakter saat mengetik sandi.
  • Aktivasi — melalui inputType="textPassword" di XML atau TYPE_TEXT_VARIATION_PASSWORD di kode.
  • Perlindungan — mencegah penyadapan visual, tangkapan layar, dan kebocoran melalui koreksi otomatis/kamus.
  • TransformationMethod — mekanisme Android yang mengganti tampilan karakter menjadi tersembunyi.
  • Pengalih visibilitas — kemampuan menampilkan sandi melalui endIconMode="password_toggle" di TextInputLayout.

Apa itu Secure Text Entry di Android

Secure Text Entry (input teks terlindungi) — adalah fungsi Android yang mengganti tampilan setiap karakter yang dimasukkan dengan simbol penutup, biasanya titik (•) atau bintang (*). Ini mencegah pembacaan sandi dari balik bahu (shoulder surfing) dan menyembunyikan data yang dimasukkan dari mata yang mengintip. Fungsi ini juga dikenal sebagai masking sandi dan merupakan praktik standar dalam aplikasi seluler.

Tidak seperti iOS, di mana Secure Text Entry adalah pengaturan terpisah UITextField, di Android fungsi ini diaktifkan melalui atribut inputType dengan variasi PASSWORD. Ketika EditText menerima inputType="textPassword", ia secara otomatis menerapkan PasswordTransformationMethod — kelas yang bertanggung jawab untuk mengganti karakter. Saat setiap karakter baru dimasukkan, EditText segera menggantinya dengan simbol penutup melalui mekanisme TransformationMethod dari antarmuka.

Menurut Android Source Code (AOSP, 2026), implementasi PasswordTransformationMethod menggunakan kelas TextPaint untuk menggambar simbol penutup. Ukuran simbol penutup sesuai dengan ukuran font bidang, yang mencegah kebocoran informasi melalui panjang kata — semua karakter terlihat identik dalam hal lebar. Ini penting untuk perlindungan terhadap serangan berdasarkan analisis panjang data yang dimasukkan.

xml
<!-- Basic Secure Text Entry example -->
@+id/etPassword
android:layout_width="match_parent"
android:hint="Enter password"
android:inputType="textPassword"
android:maxLength="64"
android:importantForAutofill="yes" />

Bagaimana Secure Text Entry bekerja

Mekanisme Secure Text Entry di Android didasarkan pada antarmuka TransformationMethod, yang didefinisikan dalam paket android.text.method. PasswordTransformationMethod — adalah implementasi bawaan yang mengganti metode getTransformation(), mengembalikan urutan karakter yang diganti untuk ditampilkan. Sementara itu, teks asli di Editable tetap tidak berubah — hanya representasi visualnya yang berubah.

Ketika pengguna memasukkan karakter, EditText memanggil dispatchEvent dan mengirimkan karakter ke InputConnection, yang menambahkannya ke Editable. Kemudian EditText memanggil metode getTransformation() dari TransformationMethod saat ini, yang menerima CharSequence asli dan mengembalikan SpannableString dengan simbol penutup. SpannableString ini digambar di layar sebagai ganti teks asli. Fitur utama — transformasi itu sendiri tidak mengubah konten Editable, oleh karena itu saat memanggil getText().toString() teks yang benar-benar dimasukkan dikembalikan.

Menurut Android Developers Reference (2026), PasswordTransformationMethod menambahkan ke setiap karakter MetricAffectingSpan yang mengganti glyph dengan titik. Span ini tidak memengaruhi panjang teks, sehingga kursor dan posisi input tetap dipertahankan dengan benar bahkan saat tampilan tersembunyi. Ada juga VisiblePasswordTransformationMethod, yang menampilkan karakter terakhir yang dimasukkan untuk waktu singkat (mirip dengan iOS).

kotlin
// PasswordTransformationMethod - masking bawaan
editText.transformationMethod = PasswordTransformationMethod.getInstance()

// VisiblePasswordTransformationMethod - menampilkan karakter terakhir
editText.transformationMethod = VisiblePasswordTransformationMethod.getInstance()

Mengalihkan visibilitas sandi

Mengalihkan visibilitas (password visibility toggle) — adalah fungsi yang memungkinkan pengguna untuk sementara menampilkan sandi yang dimasukkan untuk memeriksanya sebelum mengirim formulir. Di Android, fungsi ini diimplementasikan melalui TextInputLayout dengan atribut app:endIconMode="password_toggle\). Saat mengklik ikon mata, bidang beralih antara textPassword dan textVisiblePassword.

Implementasi password_toggle di TextInputLayout secara otomatis mengubah inputType dari EditText internal dan menganimasikan ikon (mata terbuka/tertutup). Penting untuk diingat bahwa saat peralihan ini, posisi kursor dapat direset, oleh karena itu TextInputLayout menyimpan dan memulihkan posisi setelah perubahan mode. Juga saat beralih ke sandi terlihat, koreksi otomatis dan saran tidak diaktifkan — TYPE_TEXT_VARIATION_VISIBLE_PASSWORD digunakan, bukan text biasa.

Menurut Material Design Guidelines (2025), ikon untuk menampilkan sandi harus selalu terlihat, bukan hanya saat bidang dalam fokus. Pengguna harus dapat memeriksa sandi kapan saja. Ikon tidak boleh secara otomatis menyembunyikan sandi setelah waktu tertentu — hanya dengan tindakan pengguna.

xml
<!-- TextInputLayout with password toggle -->
@+id/tilPassword
android:layout_width="match_parent"
app:endIconMode="password_toggle"
app:passwordToggleTint="@color/primary">

    @+id/etPassword
    android:inputType="textPassword"
    android:hint="Password" />

</com.google.android.material.textfield.TextInputLayout>

Konfigurasi pemrograman Secure Text Entry

Pengaturan pemrograman Secure Text Entry di Kotlin dilakukan melalui pengaturan inputType atau melalui setTransformationMethod(). Kedua pendekatan menghasilkan hasil yang sama, tetapi berbeda dalam detail. Pengaturan inputType juga mengonfigurasi koreksi otomatis dan saran, sementara setTransformationMethod hanya memengaruhi tampilan karakter.

Contoh pengalih sandi melalui TextInputLayout

kotlin
// Mengalihkan visibilitas sandi secara pemrograman
fun togglePasswordVisibility(til: TextInputLayout) {
    val editText = til.editText ?: return
    val currentType = editText.inputType
    val isPassword = (currentType and
        InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0

    if (isPassword) {
        editText.inputType = InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
    } else {
        editText.inputType = InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_PASSWORD
    }

    // Memulihkan posisi kursor
    val cursorPos = editText.selectionStart
    editText.setSelection(maxOf(0, cursorPos))
}

TransformationMethod kustom

kotlin
// Masking kustom — hanya menampilkan 4 karakter terakhir
class PartialPasswordTransformation : TransformationMethod {
    override fun getTransformation(source: CharSequence?,
        view: View?): CharSequence {
        val text = source?.toString() ?: ""
        if (text.length <= 4) return text

        val dots = "\u2022".repeat(text.length - 4)
        return dots + text.substring(text.length - 4)
    }

    override fun onFocusChanged(view: View?,
        sourceText: CharSequence?,
        focused: Boolean,
        direction: Int,
        previouslyFocusedRect: android.graphics.Rect?) {}
}

Aspek keamanan input tersembunyi

Secure Text Entry memberikan perlindungan di beberapa tingkatan. Masking visual mencegah pembacaan sandi dari balik bahu (shoulder surfing) — metode pencurian sandi yang paling umum di tempat umum. Menonaktifkan koreksi otomatis mencegah penyimpanan sandi di kamus pengguna, yang menghilangkan kebocoran melalui input prediktif. Perlindungan dari tangkapan layar (jika FLAG_SECURE diaktifkan) mencegah aplikasi lain menangkap konten bidang.

Namun Secure Text Entry bukanlah perlindungan yang lengkap. Serangan melalui penyadapan input (keylogging) di tingkat sistem dapat memperoleh karakter asli dari InputConnection. Aplikasi berbahaya dengan layanan aksesibilitas dapat membaca konten EditText, bahkan jika karakter tersembunyi di layar. Juga SSL-sniffing saat mentransmisikan data ke server dapat mengungkapkan sandi jika HTTPS tidak digunakan dengan validasi sertifikat yang benar.

Menurut OWASP Mobile Security Testing Guide (2025), untuk perlindungan maksimal sandi di Android disarankan: gunakan inputType="textPassword" + nonaktifkan autofill untuk bidang kritis; jangan menyimpan sandi di memori lebih lama dari yang diperlukan; bersihkan bidang sandi saat meminimalkan aplikasi (onPause/onStop); gunakan masking bahkan saat menampilkan sandi sementara.

Tingkat perlindunganSecure Text EntryTindakan tambahan
Penyadapan visualMasking karakterBiometric auth, hindari shoulder surfing
Tangkapan layarSebagian (tergantung implementasi)FLAG_SECURE pada Window
KeyloggingTidak melindungiGunakan IME dengan input aman
Koreksi otomatis/kamusDinonaktifkandinonaktifkan secara default untuk password
Penyadapan jaringanTidak melindungiHTTPS dengan certificate pinning

Praktik terbaik Secure Text Entry

Pengembang Android harus mengikuti beberapa praktik utama saat bekerja dengan input tersembunyi. Pertama, selalu gunakan TextInputLayout dengan endIconMode="password_toggle" untuk bidang sandi — ini adalah standar modern Material Design. Kedua, jangan nonaktifkan kemampuan untuk menampilkan sandi — pengguna harus dapat memeriksa apa yang telah mereka masukkan, terutama pada perangkat seluler dengan keyboard kecil.

Secure Text Entry juga memerlukan konfigurasi pengisian otomatis yang benar. Untuk bidang sandi, selalu tentukan autofillHints="password" atau autofillHints="newPassword" agar manajer sandi dapat mengisi dan menyimpan data dengan benar. Untuk bidang konfirmasi sandi baru, gunakan autofillHints="newPassword" agar sistem tidak menyarankan mengisinya dengan sandi tersimpan saat ini.

  • TextInputLayout — gunakan Material Design TextInputLayout dengan endIconMode untuk pengalih visibilitas.
  • Autofill — tambahkan autofillHints="password" dan importantForAutofill="yes" untuk dukungan manajer.
  • Pembersihan — bersihkan bidang sandi saat meminimalkan aplikasi (onPause/onStop).
  • Panjang — jangan batasi panjang sandi terlalu ketat (minimal 8 karakter, tanpa maksimum kaku).
  • Biometrik — tawarkan masuk biometrik (BiometricPrompt) sebagai alternatif untuk input sandi manual.
kotlin
// Bidang sandi lengkap dengan pengisian otomatis dan pembersihan
class SecurePasswordField {
    private fun setupPasswordField(til: TextInputLayout) {
        val editText = til.editText ?: return
        editText.inputType = InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_PASSWORD
        editText.setAutofillHints(View.AUTOFILL_HINT_PASSWORD>)
        editText.importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_YES
    }

    fun clearOnPause(editText: EditText) {
        editText.text?.clear()
    }
}

Pertanyaan yang Sering Diajukan

Apa perbedaan antara textPassword dan textVisiblePassword?

textPassword menyembunyikan semua karakter yang dimasukkan dan menonaktifkan koreksi otomatis. textVisiblePassword juga menonaktifkan koreksi otomatis, tetapi menampilkan karakter dalam bentuk terbuka. textVisiblePassword digunakan saat mengalihkan visibilitas sandi — ini bukan text biasa, karena koreksi otomatis dan saran tetap dinonaktifkan untuk keamanan.

Bisakah saya membuat simbol kustom untuk masking sandi?

Ya, buat kelas kustom yang mengimplementasikan antarmuka TransformationMethod. Ganti metode getTransformation(), yang mengembalikan CharSequence dengan simbol pengganti yang diinginkan. Setel melalui editText.transformationMethod = CustomPasswordTransformation(). Ingat bahwa simbol harus monospace untuk keamanan.

Mengapa tidak disarankan untuk menonaktifkan kemampuan menampilkan sandi?

Pada perangkat seluler dengan layar kecil dan keyboard sentuh, kemungkinan kesalahan saat memasukkan sandi secara signifikan lebih tinggi daripada di desktop. Kemampuan untuk memeriksa sandi yang dimasukkan mengurangi jumlah kesalahan input dan mengurangi jumlah permintaan pemulihan sandi, yang meningkatkan pengalaman pengguna dan mengurangi beban dukungan.

Bagaimana cara melindungi sandi dari tangkapan layar aplikasi?

Atur bendera FLAG_SECURE pada jendela Activity atau Dialog: window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE). Ini akan mencegah pembuatan tangkapan layar dan perekaman layar untuk seluruh jendela. Namun perlu diingat bahwa ini juga akan menonaktifkan tangkapan layar untuk konten biasa, yang mungkin tidak diinginkan.

Bagaimana cara kerja autofill untuk bidang password?

Mulai Android 8.0 (API 26), Autofill Framework secara otomatis mendeteksi bidang password melalui inputType. Untuk pengoperasian yang benar, atur importantForAutofill="yes" dan tentukan autofillHints ("password", "newPassword", "emailAddress"). Gboard dan manajer sandi menggunakan atribut ini untuk menyarankan sandi yang tersimpan.

Kesimpulan

  • Secure Text Entry — mode input tersembunyi yang mengganti karakter dengan simbol penutup (titik) melalui PasswordTransformationMethod.
  • Aktivasi — melalui inputType="textPassword" atau pengaturan pemrograman TYPE_TEXT_VARIATION_PASSWORD.
  • PasswordTransformationMethod — kelas bawaan Android yang mengganti tampilan karakter tanpa mengubah Editable.
  • Pengalih visibilitas — diimplementasikan melalui TextInputLayout dengan endIconMode="password_toggle" dan TYPE_TEXT_VARIATION_VISIBLE_PASSWORD.
  • Perlindungan — mencegah shoulder surfing, tangkapan layar (dengan FLAG_SECURE), koreksi otomatis dan penyimpanan di kamus.
  • Autofill — untuk dukungan manajer sandi, tambahkan importantForAutofill dan autofillHints="password".
  • Praktik terbaik — gunakan TextInputLayout, bersihkan bidang saat meminimalkan, jangan batasi panjang sandi terlalu ketat.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga