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 (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.
<!-- 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" />
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).
// PasswordTransformationMethod - o'rnatilgan niqoblash
editText.transformationMethod = PasswordTransformationMethod.getInstance()
// VisiblePasswordTransformationMethod - oxirgi belgini ko'rsatadi
editText.transformationMethod = VisiblePasswordTransformationMethod.getInstance()
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.
<!-- 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>
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.
// 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 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?) {}
}
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 darajasi | Secure Text Entry | Qo'shimcha choralar |
|---|---|---|
| Vizual tutib olish | Belgilarni niqoblash | Biometric auth, shoulder surfing-dan qoching |
| Ekran tasvirlari | Qisman (amalga oshirishga bog'liq) | Window-da FLAG_SECURE |
| Keylogging | Himoya qilmaydi | Xavfsiz kiritish bilan IME dan foydalaning |
| Avtomatik tuzatish/lug'at | O'chirilgan | password uchun sukut bo'yicha o'chirilgan |
| Tarmoq tutib olishi | Himoya qilmaydi | Sertifikat pinning bilan HTTPS |
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.
// 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 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.
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.
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.
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.
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
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.