Secure Text Entry — Android-də mətn daxiletmə rejimidir, bu zaman daxil edilən simvollar faktiki simvolların əvəzinə gizli formada (nöqtələr və ya ulduz işarələri ilə) göstərilir. Bu rejim parol, PIN-kod, CVV-kod və digər məxfi məlumatların daxil edilməsi sahələri üçün tətbiq edilir. Secure Text Entry yalnız məlumatları vizual ələ keçirmədən qorumur, həm də ekran görüntüləri, ekran yazıları və avtomatik düzəltmə funksiyaları vasitəsilə məlumat sızmasının qarşısını alır. Android Security Best Practices (2026)-ya görə, gizli daxiletmə istifadəçilərin autentifikasiya məlumatlarını emal edən tətbiqlər üçün məcburi tələbdir.
Əsas məqamlar
Secure Text Entry (qorunan mətn daxiletmə) — Android-in hər daxil edilən simvolun göstərilməsini maskalayan simvolla, adətən nöqtə (•) və ya ulduz işarəsi (*) ilə əvəz edən funksiyasıdır. Bu, parolun çiynin üstündən oxunmasının (shoulder surfing) qarşısını alır və daxil edilən məlumatları kənar gözlərdən gizlədir. Funksiya həmçinin parol maskalaması kimi tanınır və mobil tətbiqlərdə standart təcrübədir.
Secure Text Entry-nin UITextField-in ayrıca parametri olduğu iOS-dan fərqli olaraq, Android-də bu funksiya PASSWORD variasiyası ilə inputType atributu vasitəsilə aktivləşdirilir. EditText inputType="textPassword" aldıqda avtomatik olaraq PasswordTransformationMethod — simvolların əvəz edilməsinə cavabdeh olan sinifi tətbiq edir. Hər yeni simvol daxil edildikdə EditText onu dərhal TransformationMethod interfeysi mexanizmi vasitəsilə maskalayan simvolla əvəz edir.
Android Source Code (AOSP, 2026)-ya görə, PasswordTransformationMethod tətbiqi maskalayan simvolların çəkilməsi üçün TextPaint sinifindən istifadə edir. Maskalayan simvolun ölçüsü sahənin şrift ölçüsü ilə üst-üstə düşür ki, bu da sözün uzunluğu vasitəsilə məlumat sızmasının qarşısını alır — bütün simvollar eyni genişlikdə görünür. Bu, daxil edilən məlumatların uzunluğunun analizinə əsaslanan hücumlardan qorunmaq üçün vacibdir.
<!-- 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-də Secure Text Entry mexanizmi android.text.method paketində təyin edilmiş TransformationMethod interfeysinə əsaslanır. PasswordTransformationMethod — getTransformation() metodunu ləğv edən, göstərilmək üçün əvəz edilmiş simvol ardıcıllığını qaytaran quraşdırılmış tətbiqdir. Bununla yanaşı, Editable-də orijinal mətn dəyişməz qalır — yalnız onun vizual təsviri dəyişir.
İstifadəçi simvol daxil etdikdə EditText dispatchEvent-i çağırır və simvolu InputConnection-a ötürür, o da onu Editable-ə əlavə edir. Sonra EditText cari TransformationMethod-un getTransformation() metodunu çağırır, o, orijinal CharSequence-i alır və maskalayan simvollarla SpannableString qaytarır. Bu SpannableString orijinal mətnin əvəzinə ekranda çəkilir. Əsas xüsusiyyət — çevrilmənin özü Editable-ın məzmununu dəyişmir, buna görə də getText().toString() çağırıldıqda real daxil edilmiş mətn qaytarılır.
Android Developers Reference (2026)-ya görə, PasswordTransformationMethod hər simvola glifi nöqtə ilə əvəz edən MetricAffectingSpan əlavə edir. Bu span-lar mətnin uzunluğuna təsir etmir, buna görə də kursor və daxiletmə mövqeyi gizli göstərmə zamanı belə düzgün saxlanılır. Həmçinin VisiblePasswordTransformationMethod mövcuddur, o, son daxil edilmiş simvolu qısa müddətə göstərir (iOS-a bənzər).
// PasswordTransformationMethod - quraşdırılmış maskalama
editText.transformationMethod = PasswordTransformationMethod.getInstance()
// VisiblePasswordTransformationMethod - son simvolu göstərir
editText.transformationMethod = VisiblePasswordTransformationMethod.getInstance()
Görünmənin dəyişdirilməsi (password visibility toggle) — istifadəçiyə formanı göndərməzdən əvvəl yoxlamaq üçün daxil edilmiş parolu müvəqqəti göstərməyə imkan verən funksiyadır. Android-də bu funksiya app:endIconMode="password_toggle" atributu ilə TextInputLayout vasitəsilə həyata keçirilir. Göz işarəsinə klik edildikdə sahə textPassword və textVisiblePassword arasında keçid edir.
TextInputLayout-da password_toggle tətbiqi avtomatik olaraq daxili EditText-in inputType-nı dəyişir və işarəni animasiya edir (açıq/bağlı göz). Bu keçid zamanı kursor mövqeyinin sıfırlana biləcəyini xatırlamaq vacibdir, buna görə TextInputLayout rejim dəyişikliyindən sonra mövqeyi saxlayır və bərpa edir. Həmçinin görünən parola keçid zamanı avtomatik düzəltmə və təkliflər aktivləşdirilmir — adi text deyil, TYPE_TEXT_VARIATION_VISIBLE_PASSWORD istifadə olunur.
Material Design Guidelines (2025)-ə görə, parol göstərmə işarəsi həmişə görünməli olmalıdır, yalnız sahə fokusda olanda deyil. İstifadəçi istənilən vaxt parolu yoxlamaq imkanına malik olmalıdır. İşarə müəyyən müddətdən sonra avtomatik parolu gizlətməməlidir — yalnız istifadəçinin hərəkəti ilə.
<!-- 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-də Secure Text Entry-nin proqram qurulması inputType-ın təyin edilməsi və ya setTransformationMethod() vasitəsilə həyata keçirilir. Hər iki yanaşma eyni nəticəyə gətirib çıxarır, lakin detallarda fərqlənir. inputType-ın təyin edilməsi əlavə olaraq avtomatik düzəltmə və təklifləri konfiqurasiya edir, halbuki setTransformationMethod yalnız simvolların göstərilməsinə təsir edir.
// Proqram vasitəsilə parol görünməsinin dəyişdirilməsi
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 mövqeyini bərpa et
val cursorPos = editText.selectionStart
editText.setSelection(maxOf(0, cursorPos))
}
// Xüsusi maskalama — yalnız son 4 simvolu göstərir
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 neçə səviyyədə qoruma təmin edir. Vizual maskalama parolun çiynin üstündən oxunmasının (shoulder surfing) — ictimai yerlərdə parol oğurluğunun ən geniş yayılmış metodunun qarşısını alır. Avtomatik düzəltmənin söndürülməsi parolun istifadəçi lüğətində saxlanmasının qarşısını alır, bu da onun prediktiv daxiletmə vasitəsilə sızmasını istisna edir. Ekran görüntülərindən qorunma (FLAG_SECURE aktivdirsə) digər tətbiqlərə sahənin məzmununu ələ keçirməyə imkan vermir.
Lakin Secure Text Entry tam qoruma deyil. Sistem səviyyəsində daxiletmənin ələ keçirilməsi (keylogging) hücumları InputConnection-dan real simvolları əldə edə bilər. Əlçatanlıq xidməti olan zərərli tətbiqlər simvollar ekranda gizlənsə belə EditText-in məzmununu oxuya bilər. Həmçinin məlumatların serverə ötürülməsi zamanı SSL-sniffing sertifikatın düzgün validasiyası olmadan HTTPS istifadə edilmədikdə parolu aşkar edə bilər.
OWASP Mobile Security Testing Guide (2025)-ə görə, Android-də parolların maksimum qorunması üçün tövsiyə olunur: kritik sahələr üçün inputType="textPassword" + autofill-i söndürmək; parolu yaddaşda lazım olduğundan artıq saxlamaq; tətbiq minimuma endirildikdə parol sahəsini təmizləmək (onPause/onStop); parol qısa müddətə göstərilsə belə maskalamadan istifadə etmək.
| Qoruma səviyyəsi | Secure Text Entry | Əlavə tədbirlər |
|---|---|---|
| Vizual ələ keçirmə | Simvolların maskalanması | Biometric auth, shoulder surfing-dən qaçın |
| Ekran görüntüləri | Qismən (tətbiqdən asılıdır) | Window-da FLAG_SECURE |
| Keylogging | Qorumur | Təhlükəsiz daxiletmə ilə IME istifadə edin |
| Avtomatik düzəltmə/lüğət | Söndürülüb | password üçün susmaya görə söndürülüb |
| Şəbəkə ələ keçirməsi | Qorumur | Sertifikat pinning ilə HTTPS |
Android tərtibatçıları gizli daxiletmə ilə işləyərkən bir neçə əsas təcrübəyə riayət etməlidirlər. Birincisi, parol sahələri üçün həmişə endIconMode="password_toggle" ilə TextInputLayout istifadə edin — bu Material Design-ın müasir standartıdır. İkincisi, parolu göstərmək imkanını söndürməyin — istifadəçi xüsusilə kiçik klaviaturaya malik mobil cihazlarda nə daxil etdiyini yoxlamaq imkanına malik olmalıdır.
Secure Text Entry həmçinin avtomatik doldurmanın düzgün konfiqurasiyasını tələb edir. Parol sahələri üçün mütləq autofillHints="password" və ya autofillHints="newPassword" təyin edin ki, parol menecerləri məlumatları düzgün doldura və saxlaya bilsinlər. Yeni parolun təsdiq sahəsi üçün autofillHints="newPassword" istifadə edin ki, sistem onu cari saxlanmış parolla doldurmağı təklif etməsin.
// Avtomatik doldurma və təmizləmə ilə tam parol sahəsi
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 verilən suallar
textPassword bütün daxil edilən simvolları gizlədir və avtomatik düzəltməni söndürür. textVisiblePassword də avtomatik düzəltməni söndürür, lakin simvolları açıq formada göstərir. textVisiblePassword parol görünməsinin dəyişdirilməsi zamanı istifadə olunur — bu adi text deyil, çünki avtomatik düzəltmə və təkliflər təhlükəsizlik üçün söndürülmüş qalır.
Bəli, TransformationMethod interfeysini tətbiq edən xüsusi sinif yaradın. getTransformation() metodunu ləğv edin, lazımi əvəz simvolu ilə CharSequence qaytarın. Onu editText.transformationMethod = CustomPasswordTransformation() vasitəsilə təyin edin. Unutmayın ki, simvol təhlükəsizlik üçün monogenişlikdə olmalıdır.
Kiçik ekranları və sensor klaviatura olan mobil cihazlarda parol daxil edərkən səhv ehtimalı masaüstü kompüterdən əhəmiyyətli dərəcədə yüksəkdir. Daxil edilmiş parolu yoxlamaq imkanı daxiletmə səhvlərinin sayını azaldır və parolun bərpası sorğularının sayını azaldır, bu da istifadəçi təcrübəsini yaxşılaşdırır və dəstək yükünü azaldır.
Activity və ya Dialog pəncərəsində FLAG_SECURE bayrağını təyin edin: window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE). Bu, bütün pəncərə üçün ekran görüntülərinin yaradılmasının və ekran yazısının qarşısını alacaq. Lakin nəzərə alın ki, bu, adi məzmun üçün də ekran görüntülərini söndürəcək, bu arzuolunmaz ola bilər.
Android 8.0-dan (API 26) başlayaraq, Autofill Framework avtomatik olaraq password sahələrini inputType vasitəsilə müəyyən edir. Düzgün işləməsi üçün importantForAutofill="yes" təyin edin və autofillHints ("password", "newPassword", "emailAddress") qeyd edin. Gboard və parol menecerləri saxlanmış parolları təklif etmək üçün bu atributlardan istifadə edir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun