Secure Text Entry — bu nima, Android-da kiritish himoyasi va parollar

Muallif: IT Sectr Nashr etilgan: 2026-07-07 O'qish vaqti: 9 daq

Secure Text Entry — Android-da matn kiritish rejimi bo'lib, unda kiritilgan belgilar haqiqiy belgilar o'rniga yashirin ko'rinishda (nuqta yoki yulduzchalar bilan) ko'rsatiladi. Bu rejim parollar, PIN-kodlar, CVV-kodlar va boshqa maxfiy ma'lumotlarni kiritish maydonlari uchun qo'llaniladi. Secure Text Entry nafaqat ma'lumotlarni vizual tutib olishdan himoya qiladi, balki ekran tasvirlari, ekran yozuvlari va avtomatik tuzatish funksiyalari orqali ma'lumot sizib chiqishining oldini oladi. Android Security Best Practices (2026) ma'lumotlariga ko'ra, yashirin kiritish foydalanuvchilarning autentifikatsiya ma'lumotlarini qayta ishlovchi ilovalar uchun majburiy talabdir.

Asosiy fikrlar

  • Secure Text Entry — parol kiritishda belgilar o'rniga nuqtalarni ko'rsatadigan yashirin kiritish rejimi.
  • Faollashtirish — XML-da inputType="textPassword" yoki kodda TYPE_TEXT_VARIATION_PASSWORD orqali.
  • Himoya — vizual tutib olish, ekran tasvirlari va avtomatik tuzatish/lug'at orqali sizib chiqishning oldini oladi.
  • TransformationMethod — belgilar ko'rinishini yashirin bilan almashtiruvchi Android mexanizmi.
  • Ko'rinishni almashtirish — TextInputLayout-da endIconMode="password_toggle" orqali parolni ko'rsatish imkoniyati.

Android-da Secure Text Entry nima

Secure Text Entry (himoyalangan matn kiritish) — Android-ning har bir kiritilgan belgining ko'rinishini niqoblovchi belgi bilan, odatda nuqta (•) yoki yulduzcha (*) bilan almashtiruvchi funksiyasidir. Bu parolni yelka ortidan o'qishning (shoulder surfing) oldini oladi va kiritilgan ma'lumotlarni begona ko'zlardan yashiradi. Funksiya shuningdek parol niqoblash sifatida tanilgan va mobil ilovalarda standart amaliyotdir.

Secure Text Entry UITextField-ning alohida sozlamasi bo'lgan iOS-dan farqli o'laroq, Android-da bu funksiya PASSWORD variatsiyasi bilan inputType atributi orqali faollashtiriladi. EditText inputType="textPassword" olganida, avtomatik ravishda PasswordTransformationMethod — belgilarni almashtirish uchun mas'ul bo'lgan sinfni qo'llaydi. Har bir yangi belgi kiritilganda, EditText uni darhol TransformationMethod interfeysi mexanizmi orqali niqoblovchi belgi bilan almashtiradi.

Android Source Code (AOSP, 2026) ma'lumotlariga ko'ra, PasswordTransformationMethod amalga oshirilishi niqoblovchi belgilarni chizish uchun TextPaint sinfidan foydalanadi. Niqoblovchi belgining o'lchami maydon shrift o'lchami bilan mos keladi, bu so'z uzunligi orqali ma'lumot sizib chiqishining oldini oladi — barcha belgilar kengligi bo'yicha bir xil ko'rinadi. Bu kiritilgan ma'lumotlar uzunligini tahlil qilishga asoslangan hujumlardan himoya qilish uchun muhimdir.

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" />

Secure Text Entry qanday ishlaydi

Android-da Secure Text Entry mexanizmi android.text.method paketida belgilangan TransformationMethod interfeysiga asoslanadi. PasswordTransformationMethod — getTransformation() metodini bekor qiluvchi, ko'rsatish uchun almashtirilgan belgilar ketma-ketligini qaytaruvchi o'rnatilgan amalga oshirishdir. Shu bilan birga, Editable-dagi asl matn o'zgarishsiz qoladi — faqat uning vizual tasviri o'zgaradi.

Foydalanuvchi belgi kiritganda, EditText dispatchEvent-ni chaqiradi va belgini InputConnection-ga uzatadi, u uni Editable-ga qo'shadi. Keyin EditText joriy TransformationMethod-ning getTransformation() metodini chaqiradi, u asl CharSequence-ni oladi va niqoblovchi belgilar bilan SpannableString qaytaradi. Bu SpannableString asl matn o'rniga ekranda chiziladi. Asosiy xususiyat — o'zgartirishning o'zi Editable mazmunini o'zgartirmaydi, shuning uchun getText().toString() chaqirilganda haqiqiy kiritilgan matn qaytariladi.

Android Developers Reference (2026) ma'lumotlariga ko'ra, PasswordTransformationMethod har bir belgiga glifni nuqta bilan almashtiruvchi MetricAffectingSpan qo'shadi. Bu span-lar matn uzunligiga ta'sir qilmaydi, shuning uchun kursor va kiritish pozitsiyasi yashirin ko'rsatishda ham to'g'ri saqlanadi. Shuningdek VisiblePasswordTransformationMethod mavjud bo'lib, u oxirgi kiritilgan belgini qisqa vaqt davomida ko'rsatadi (iOS-ga o'xshash).

kotlin
// PasswordTransformationMethod - o'rnatilgan niqoblash
editText.transformationMethod = PasswordTransformationMethod.getInstance()

// VisiblePasswordTransformationMethod - oxirgi belgini ko'rsatadi
editText.transformationMethod = VisiblePasswordTransformationMethod.getInstance()

Parol ko'rinishini almashtirish

Ko'rinishni almashtirish (password visibility toggle) — foydalanuvchiga formani yuborishdan oldin tekshirish uchun kiritilgan parolni vaqtincha ko'rsatish imkonini beruvchi funksiyadir. Android-da bu funksiya app:endIconMode="password_toggle" atributi bilan TextInputLayout orqali amalga oshiriladi. Ko'z belgisini bosganda, maydon textPassword va textVisiblePassword o'rtasida almashadi.

TextInputLayout-dagi password_toggle amalga oshirilishi avtomatik ravishda ichki EditText-ning inputType-ni o'zgartiradi va belgini animatsiya qiladi (ochiq/yopiq ko'z). Shuni yodda tutish kerakki, bu almashishda kursor pozitsiyasi qayta o'rnatilishi mumkin, shuning uchun TextInputLayout rejim o'zgarishidan keyin pozitsiyani saqlaydi va tiklaydi. Shuningdek, ko'rinadigan parolga o'tishda avtomatik tuzatish va takliflar yoqilmaydi — oddiy text emas, TYPE_TEXT_VARIATION_VISIBLE_PASSWORD ishlatiladi.

Material Design Guidelines (2025) ma'lumotlariga ko'ra, parolni ko'rsatish belgisi har doim ko'rinadigan bo'lishi kerak, faqat maydon fokusda bo'lganda emas. Foydalanuvchi istalgan vaqtda parolni tekshirish imkoniyatiga ega bo'lishi kerak. Belgisi ma'lum vaqtdan keyin avtomatik ravishda parolni yashirmasligi kerak — faqat foydalanuvchi harakati bilan.

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>

Secure Text Entry-ni dasturiy sozlash

Kotlin-da Secure Text Entry-ni dasturiy o'rnatish inputType-ni belgilash yoki setTransformationMethod() orqali amalga oshiriladi. Ikkala yondashuv ham bir xil natijaga olib keladi, ammo tafsilotlarda farqlanadi. inputType-ni belgilash qo'shimcha ravishda avtomatik tuzatish va takliflarni sozlaydi, setTransformationMethod esa faqat belgilar ko'rinishiga ta'sir qiladi.

TextInputLayout orqali parol almashtirgich namunasi

kotlin
// Dasturiy parol ko'rinishini almashtirish
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
    }

    // Kursor pozitsiyasini tiklash
    val cursorPos = editText.selectionStart
    editText.setSelection(maxOf(0, cursorPos))
}

Maxsus TransformationMethod

kotlin
// Maxsus niqoblash — faqat oxirgi 4 belgini ko'rsatadi
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?) {}
}

Yashirin kiritishning xavfsizlik jihatlari

Secure Text Entry bir necha darajada himoyani ta'minlaydi. Vizual niqoblash parolni yelka ortidan o'qishning (shoulder surfing) — jamoat joylarida parol o'g'irlashning eng keng tarqalgan usulining oldini oladi. Avtomatik tuzatishni o'chirish parolning foydalanuvchi lug'atida saqlanishining oldini oladi, bu uning bashoratli kiritish orqali sizib chiqishini istisno qiladi. Ekran tasvirlaridan himoya (FLAG_SECURE yoqilgan bo'lsa) boshqa ilovalarga maydon mazmunini olishga ruxsat bermaydi.

Biroq Secure Text Entry to'liq himoya emas. Tizim darajasida kiritishni tutib olish (keylogging) hujumlari InputConnection-dan haqiqiy belgilarni olishi mumkin. Maxsus imkoniyatlar xizmati (accessibility) bo'lgan zararli ilovalar belgilar ekranda yashirilgan bo'lsa ham, EditText mazmunini o'qishi mumkin. Shuningdek, ma'lumotlarni serverga uzatishda SSL-sniffing sertifikatni to'g'ri tekshirishsiz HTTPS ishlatilmasa, parolni ochib berishi mumkin.

OWASP Mobile Security Testing Guide (2025) ma'lumotlariga ko'ra, Android-da parollarni maksimal himoya qilish uchun tavsiya etiladi: muhim maydonlar uchun inputType="textPassword" + autofill-ni o'chirish; parolni xotirada kerak bo'lgandan ortiq saqlamaslik; ilova minimallashtirilganda parol maydonini tozalash (onPause/onStop); parol qisqa muddatga ko'rsatilganda ham niqoblashdan foydalanish.

Himoya darajasiSecure Text EntryQo'shimcha choralar
Vizual tutib olishBelgilarni niqoblashBiometric auth, shoulder surfing-dan qoching
Ekran tasvirlariQisman (amalga oshirishga bog'liq)Window-da FLAG_SECURE
KeyloggingHimoya qilmaydiXavfsiz kiritish bilan IME dan foydalaning
Avtomatik tuzatish/lug'atO'chirilganpassword uchun sukut bo'yicha o'chirilgan
Tarmoq tutib olishiHimoya qilmaydiSertifikat pinning bilan HTTPS

Secure Text Entry uchun eng yaxshi amaliyotlar

Android dasturchilari yashirin kiritish bilan ishlashda bir nechta asosiy amaliyotlarga rioya qilishlari kerak. Birinchidan, parol maydonlari uchun doimo endIconMode="password_toggle" bilan TextInputLayout dan foydalaning — bu Material Design-ning zamonaviy standartidir. Ikkinchidan, parolni ko'rsatish imkoniyatini o'chirmang — foydalanuvchi, ayniqsa kichik klaviaturaga ega mobil qurilmalarda, nima kiritganini tekshirish imkoniyatiga ega bo'lishi kerak.

Secure Text Entry shuningdek avtomatik to'ldirishni to'g'ri sozlashni talab qiladi. Parol maydonlari uchun majburiy ravishda autofillHints="password" yoki autofillHints="newPassword" ni belgilang, shunda parol menejerlari ma'lumotlarni to'g'ri to'ldirishi va saqlashi mumkin. Yangi parolni tasdiqlash maydoni uchun autofillHints="newPassword" dan foydalaning, shunda tizim uni joriy saqlangan parol bilan to'ldirishni taklif qilmaydi.

  • TextInputLayout — ko'rinishni almashtirish uchun Material Design TextInputLayout dan endIconMode bilan foydalaning.
  • Autofill — menejerlarni qo'llab-quvvatlash uchun autofillHints="password" va importantForAutofill="yes" qo'shing.
  • Tozalash — ilova minimallashtirilganda parol maydonini tozalang (onPause/onStop).
  • Uzunlik — parol uzunligini juda qattiq cheklamang (minimal 8 belgi, qattiq maksimumsiz).
  • Biometriya — parolni qo'lda kiritishga muqobil sifatida biometrik kirishni (BiometricPrompt) taklif qiling.
kotlin
// Avtomatik to'ldirish va tozalash bilan to'liq parol maydoni
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()
    }
}

Tez-tez beriladigan savollar

textPassword va textVisiblePassword o'rtasidagi farq nima?

textPassword barcha kiritilgan belgilarni yashiradi va avtomatik tuzatishni o'chiradi. textVisiblePassword ham avtomatik tuzatishni o'chiradi, lekin belgilarni ochiq ko'rinishda ko'rsatadi. textVisiblePassword parol ko'rinishini almashtirishda ishlatiladi — bu oddiy text emas, chunki avtomatik tuzatish va takliflar xavfsizlik uchun o'chirilgan holda qoladi.

Parolni niqoblash uchun maxsus belgi yasash mumkinmi?

Ha, TransformationMethod interfeysini amalga oshiruvchi maxsus sinf yarating. getTransformation() metodini bekor qiling, kerakli almashtirish belgisi bilan CharSequence qaytaring. Uni editText.transformationMethod = CustomPasswordTransformation() orqali o'rnating. Yodda tutingki, belgi xavfsizlik uchun mono kenglikli bo'lishi kerak.

Nega parolni ko'rsatish imkoniyatini o'chirish tavsiya etilmaydi?

Kichik ekranlari va sensorli klaviaturasi bo'lgan mobil qurilmalarda parol kiritishda xato qilish ehtimoli ish stoli kompyuteriga qaraganda ancha yuqori. Kiritilgan parolni tekshirish imkoniyati kiritish xatolar sonini kamaytiradi va parolni tiklash so'rovlari sonini kamaytiradi, bu foydalanuvchi tajribasini yaxshilaydi va qo'llab-quvvatlash yukini kamaytiradi.

Parolni ilova ekran tasvirlaridan qanday himoya qilish mumkin?

Activity yoki Dialog oynasida FLAG_SECURE bayrog'ini o'rnating: window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE). Bu butun oyna uchun ekran tasvirlari yaratilishi va ekran yozuvining oldini oladi. Biroq shuni yodda tutingki, bu oddiy mazmun uchun ham ekran tasvirlarini o'chiradi, bu istalmagan bo'lishi mumkin.

Autofill password maydonlari uchun qanday ishlaydi?

Android 8.0 (API 26) dan boshlab, Autofill Framework avtomatik ravishda password maydonlarini inputType orqali aniqlaydi. To'g'ri ishlashi uchun importantForAutofill="yes" ni o'rnating va autofillHints ("password", "newPassword", "emailAddress") ni belgilang. Gboard va parol menejerlari saqlangan parollarni taklif qilish uchun bu atributlardan foydalanadi.

Xulosa

  • Secure Text Entry — PasswordTransformationMethod orqali belgilarni niqoblovchi belgilar (nuqtalar) bilan almashtiruvchi yashirin kiritish rejimi.
  • Faollashtirish — inputType="textPassword" yoki TYPE_TEXT_VARIATION_PASSWORD dasturiy o'rnatish orqali.
  • PasswordTransformationMethod — Editable-ni o'zgartirmasdan belgilar ko'rinishini almashtiruvchi Android-ning o'rnatilgan sinfi.
  • Ko'rinishni almashtirish — endIconMode="password_toggle" va TYPE_TEXT_VARIATION_VISIBLE_PASSWORD bilan TextInputLayout orqali amalga oshiriladi.
  • Himoya — shoulder surfing, ekran tasvirlari (FLAG_SECURE bilan), avtomatik tuzatish va lug'atga yozishning oldini oladi.
  • Autofill — parol menejerlarini qo'llab-quvvatlash uchun importantForAutofill va autofillHints="password" qo'shing.
  • Eng yaxshi amaliyotlar — TextInputLayout dan foydalaning, minimallashtirishda maydonni tozalang, parol uzunligini qattiq cheklamang.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing