Secure Text Entry — nedir, Android'de giriş koruması ve şifreler

Yazar: IT Sectr Yayınlanma: 2026-07-07 Okuma süresi: 9 dk

Secure Text Entry, Android'de girilen karakterlerin gerçek karakterler yerine gizli biçimde (noktalar veya yıldızlar) görüntülendiği bir metin giriş modudur. Bu mod, şifre alanları, PIN kodları, CVV kodları ve diğer gizli bilgiler için kullanılır. Secure Text Entry, verileri yalnızca görsel müdahaleden korumakla kalmaz, aynı zamanda ekran görüntüleri, ekran kayıtları ve otomatik düzeltme işlevleri yoluyla sızıntıyı da önler. Android Security Best Practices (2026)'ya göre, gizli giriş, kullanıcı kimlik doğrulama verilerini işleyen uygulamalar için zorunlu bir gerekliliktir.

Önemli Noktalar

  • Secure Text Entry — şifre girerken karakterler yerine noktalar gösteren gizli giriş modu.
  • Etkinleştirme — XML'de inputType="textPassword" veya kodda TYPE_TEXT_VARIATION_PASSWORD ile.
  • Koruma — görsel müdahale, ekran görüntüleri ve otomatik düzeltme/sözlük yoluyla sızıntıyı önler.
  • TransformationMethod — karakter görüntülemeyi gizli sembollerle değiştiren Android mekanizması.
  • Görünürlük değiştirme — TextInputLayout'da endIconMode="password_toggle" ile şifre gösterme yeteneği.

Android'de Secure Text Entry Nedir

Secure Text Entry (korunan metin girişi), girilen her karakterin görüntülenmesini genellikle bir nokta (•) veya yıldız (*) gibi bir maskeleme karakteriyle değiştiren bir Android özelliğidir. Bu, omuz üzerinden şifre okumayı (shoulder surfing) önler ve girilen verileri meraklı gözlerden gizler. Bu özellik aynı zamanda şifre maskeleme olarak da bilinir ve mobil uygulamalarda standart bir uygulamadır.

iOS'ta Secure Text Entry'nin ayrı bir UITextField ayarı olmasının aksine, Android'de bu özellik PASSWORD varyasyonuyla inputType niteliği aracılığıyla etkinleştirilir. Bir EditText inputType="textPassword" aldığında, otomatik olarak PasswordTransformationMethod'u uygular — karakter değiştirmeden sorumlu bir sınıf. Her yeni karakter girildiğinde, EditText onu TransformationMethod arayüz mekanizması aracılığıyla anında bir maskeleme karakteriyle değiştirir.

Android Source Code (AOSP, 2026)'ya göre, PasswordTransformationMethod'un uygulanması, maskeleme karakterlerini işlemek için TextPaint sınıfını kullanır. Maskeleme karakterinin boyutu alanın yazı tipi boyutuyla eşleşir, bu da kelime uzunluğu aracılığıyla bilgi sızıntısını önler — tüm karakterler genişlikte aynı görünür. Bu, girilen verilerin uzunluğunun analizine dayalı saldırılara karşı koruma için önemlidir.

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 Nasıl Çalışır

Android'deki Secure Text Entry mekanizması, android.text.method paketinde tanımlanan TransformationMethod arayüzüne dayanır. PasswordTransformationMethod, getTransformation() yöntemini geçersiz kılan ve görüntüleme için değiştirilmiş bir karakter dizisi döndüren yerleşik bir uygulamadır. Editable'daki orijinal metin değişmeden kalır — yalnızca görsel temsili değiştirilir.

Bir kullanıcı karakter girdiğinde, EditText dispatchEvent'i çağırır ve karakteri InputConnection'a iletir, bu da onu Editable'a ekler. Ardından EditText, geçerli TransformationMethod'un getTransformation() yöntemini çağırır, bu da orijinal CharSequence'ı alır ve maskeleme karakterleriyle bir SpannableString döndürür. Bu SpannableString, orijinal metin yerine ekranda işlenir. Temel özellik, dönüşümün kendisinin Editable içeriğini değiştirmemesidir, bu nedenle getText().toString() çağrısı gerçek girilen metni döndürür.

Android Developers Reference (2026)'ya göre, PasswordTransformationMethod her karaktere bir MetricAffectingSpan ekler ve glifi bir noktayla değiştirir. Bu span'lar metin uzunluğunu etkilemez, bu nedenle gizli görüntülemede bile imleç ve giriş konumu doğru şekilde korunur. Ayrıca, son girilen karakteri kısa bir süre gösteren VisiblePasswordTransformationMethod da bulunur (iOS'a benzer).

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

// VisiblePasswordTransformationMethod - shows last char
editText.transformationMethod = VisiblePasswordTransformationMethod.getInstance()

Şifre Görünürlüğünü Değiştirme

Görünürlük değiştirme (password visibility toggle), kullanıcının formu göndermeden önce girilen şifreyi geçici olarak gösterip kontrol etmesini sağlayan bir özelliktir. Android'de bu özellik, app:endIconMode="password_toggle" niteliğine sahip TextInputLayout aracılığıyla uygulanır. Göz simgesine dokunulduğunda, alan textPassword ve textVisiblePassword arasında geçiş yapar.

TextInputLayout'taki password_toggle uygulaması, dahili EditText'in inputType'ını otomatik olarak değiştirir ve simgeyi canlandırır (göz açık/kapalı). Bu geçiş sırasında imleç konumunun sıfırlanabileceğini unutmamak önemlidir, bu nedenle TextInputLayout mod değişikliğinden sonra konumu kaydeder ve geri yükler. Ayrıca, görünür şifreye geçerken otomatik düzeltme ve öneriler etkinleştirilmez — normal metin değil, TYPE_TEXT_VARIATION_VISIBLE_PASSWORD kullanılır.

Material Design Guidelines (2025)'e göre, şifre gösterme simgesi yalnızca alan odaklandığında değil, her zaman görünür olmalıdır. Kullanıcı herhangi bir anda şifreyi kontrol edebilmelidir. Simge, belirli bir süre sonra şifreyi otomatik olarak gizlememelidir — yalnızca kullanıcı eylemiyle.

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 Programlı Yapılandırma

Kotlin'de Secure Text Entry'nin programlı ayarı, inputType ayarlanarak veya setTransformationMethod() aracılığıyla yapılır. Her iki yaklaşım da aynı sonuca götürür ancak ayrıntılarda farklılık gösterir. inputType ayarlamak ayrıca otomatik düzeltme ve önerileri de yapılandırırken, setTransformationMethod yalnızca karakter görüntülemeyi etkiler.

TextInputLayout ile Şifre Değiştirme Örneği

kotlin
// Programmatic password visibility toggle
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
    }

    // Restore cursor position
    val cursorPos = editText.selectionStart
    editText.setSelection(maxOf(0, cursorPos))
}

Özel TransformationMethod

kotlin
// Custom masking — shows only last 4 chars
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?) {}
}

Gizli Girişin Güvenlik Yönleri

Secure Text Entry birden çok düzeyde koruma sağlar. Görsel maskeleme, omuz üzerinden şifre okumayı (shoulder surfing) önler — halka açık yerlerde şifre hırsızlığının en yaygın yöntemi. Otomatik düzeltmeyi devre dışı bırakmak, şifrenin kullanıcının sözlüğünde kaydedilmesini önleyerek tahmine dayalı giriş yoluyla sızıntıyı ortadan kaldırır. Ekran görüntülerine karşı koruma (FLAG_SECURE etkinse) diğer uygulamaların alan içeriğini yakalamasını engeller.

Ancak Secure Text Entry tam bir koruma değildir. Sistem düzeyinde giriş müdahalesi (keylogging) saldırıları, InputConnection'dan gerçek karakterleri alabilir. Erişilebilirlik hizmetine sahip kötü amaçlı uygulamalar, karakterler ekranda gizli olsa bile EditText içeriğini okuyabilir. Ayrıca, sunucuya veri iletimi sırasında SSL dinlemesi, uygun sertifika doğrulamasıyla HTTPS kullanılmazsa şifreyi ifşa edebilir.

OWASP Mobile Security Testing Guide (2025)'e göre, Android'de maksimum şifre koruması için önerilir: kritik alanlar için inputType="textPassword" + autofill'i devre dışı bırakın; şifreyi gerekenden daha uzun süre bellekte önbelleğe almayın; uygulama simge durumuna küçültüldüğünde şifre alanını temizleyin (onPause/onStop); şifrenin kısa süreli gösterimi sırasında bile maskeleme kullanın.

Koruma düzeyiSecure Text EntryEk önlemler
Görsel müdahaleKarakter maskelemeBiyometrik kimlik doğrulama, shoulder surfing'den kaçınma
Ekran görüntüleriKısmi (uygulamaya bağlı)Window'da FLAG_SECURE
KeyloggingKorumazGüvenli girişli IME kullanın
Otomatik düzeltme/sözlükDevre dışışifre için varsayılan olarak devre dışı
Ağ müdahalesiKorumazSertifika sabitlemeli HTTPS

Secure Text Entry En İyi Uygulamalar

Android geliştiricileri, gizli girişle çalışırken birkaç temel uygulamayı izlemelidir. Birincisi, şifre alanları için her zaman endIconMode="password_toggle" ile TextInputLayout kullanın — bu modern Material Design standardıdır. İkincisi, şifreyi gösterme yeteneğini devre dışı bırakmayın — kullanıcı, özellikle küçük klavyeli mobil cihazlarda ne girdiğini doğrulayabilmelidir.

Secure Text Entry ayrıca uygun otomatik doldurma yapılandırması gerektirir. Şifre alanları için, şifre yöneticilerinin verileri doğru şekilde doldurup kaydedebilmesi için her zaman autofillHints="password" veya autofillHints="newPassword" belirtin. Yeni şifre onay alanı için autofillHints="newPassword" kullanın, böylece sistem onu mevcut kayıtlı şifreyle doldurmayı önermez.

  • TextInputLayout — görünürlük değiştirme için endIconMode ile Material Design TextInputLayout kullanın.
  • Autofill — yönetici desteği için autofillHints="password" ve importantForAutofill="yes" ekleyin.
  • Temizleme — uygulama simge durumuna küçültüldüğünde şifre alanını temizleyin (onPause/onStop).
  • Uzunluk — şifre uzunluğunu çok katı bir şekilde sınırlamayın (en az 8 karakter, katı maksimum olmadan).
  • Biyometri — manuel şifre girişine alternatif olarak biyometrik giriş (BiometricPrompt) sunun.
kotlin
// Full password field with autofill and cleanup
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()
    }
}

Sıkça Sorulan Sorular

textPassword ve textVisiblePassword arasındaki fark nedir?

textPassword girilen tüm karakterleri gizler ve otomatik düzeltmeyi devre dışı bırakır. textVisiblePassword da otomatik düzeltmeyi devre dışı bırakır ancak karakterleri açıkça gösterir. textVisiblePassword, şifre görünürlüğü değiştirilirken kullanılır — güvenlik için otomatik düzeltme ve öneriler devre dışı kaldığından normal metin değildir.

Şifre maskeleme için özel bir karakter oluşturabilir miyim?

Evet, TransformationMethod arayüzünü uygulayan özel bir sınıf oluşturun. İstenen değiştirme karakteriyle bir CharSequence döndüren getTransformation() yöntemini geçersiz kılın. editText.transformationMethod = CustomPasswordTransformation() ile ayarlayın. Güvenlik için karakterin sabit genişlikli olması gerektiğini unutmayın.

Şifreyi gösterme yeteneğini devre dışı bırakmak neden önerilmez?

Küçük ekranlı ve dokunmatik klavyeli mobil cihazlarda, şifre girerken hata olasılığı masaüstüne göre önemli ölçüde daha yüksektir. Girilen şifreyi kontrol etme yeteneği, giriş hatalarını azaltır ve şifre sıfırlama taleplerinin sayısını düşürerek kullanıcı deneyimini iyileştirir ve destek yükünü azaltır.

Şifreyi uygulama ekran görüntülerinden nasıl korurum?

Activity veya Dialog penceresinde FLAG_SECURE bayrağını ayarlayın: window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE). Bu, tüm pencere için ekran görüntülerini ve ekran kaydını önler. Ancak, bunun normal içerik için de ekran görüntülerini devre dışı bırakacağını unutmayın, bu istenmeyebilir.

Şifre alanları için otomatik doldurma nasıl çalışır?

Android 8.0 (API 26) ile başlayarak, Autofill Framework şifre alanlarını inputType ile otomatik olarak algılar. Doğru çalışma için importantForAutofill="yes" ayarlayın ve autofillHints ("password", "newPassword", "emailAddress") belirtin. Gboard ve şifre yöneticileri, kayıtlı şifreleri önermek için bu nitelikleri kullanır.

Özet

  • Secure Text Entry — PasswordTransformationMethod aracılığıyla karakterleri maskeleme sembolleriyle (noktalar) değiştiren gizli giriş modu.
  • Etkinleştirme — inputType="textPassword" veya TYPE_TEXT_VARIATION_PASSWORD programlı ayarı ile.
  • PasswordTransformationMethod — Editable'ı değiştirmeden karakter görüntülemeyi değiştiren yerleşik Android sınıfı.
  • Görünürlük değiştirme — endIconMode="password_toggle" ve TYPE_TEXT_VARIATION_VISIBLE_PASSWORD ile TextInputLayout aracılığıyla uygulanır.
  • Koruma — shoulder surfing, ekran görüntüleri (FLAG_SECURE ile), otomatik düzeltme ve sözlük depolamayı önler.
  • Autofill — şifre yöneticisi desteği için importantForAutofill ve autofillHints="password" ekleyin.
  • En iyi uygulamalar — TextInputLayout kullanın, simge durumuna küçültürken alanı temizleyin, şifre uzunluğunu katı şekilde sınırlamayın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun