Secure Text Entry — egy szövegbeviteli mód Androidban, amelyben a beírt karakterek rejtett formában (pontokkal vagy csillagokkal) jelennek meg a tényleges karakterek helyett. Ezt a módot jelszavak, PIN-kódok, CVV-kódok és más bizalmas információk beviteli mezőihez használják. A Secure Text Entry nemcsak az adatokat védi a vizuális lehallgatástól, hanem megakadályozza a szivárgást képernyőképek, képernyőfelvételek és automatikus javítási funkciók révén. A Android Security Best Practices (2026) szerint a rejtett bevitel kötelező követelmény a felhasználók hitelesítési adatait feldolgozó alkalmazások számára.
Főbb pontok
Secure Text Entry (védett szövegbevitel) — egy Android funkció, amely minden beírt karakter megjelenítését egy maszkoló szimbólumra, általában pontra (•) vagy csillagra (*) cseréli. Ez megakadályozza a jelszó váll fölötti elolvasását (shoulder surfing) és elrejti a beírt adatokat a kíváncsi szemek elől. A funkció jelszómaszkolásként is ismert, és szabványos gyakorlat a mobilalkalmazásokban.
Az iOS-szel ellentétben, ahol a Secure Text Entry az UITextField külön beállítása, Androidban ez a funkció az inputType attribútumon keresztül aktiválódik PASSWORD variációval. Amikor az EditText inputType="textPassword"-t kap, automatikusan alkalmazza a PasswordTransformationMethod-ot — a karakterek cseréjéért felelős osztályt. Minden új karakter beírásakor az EditText azonnal lecseréli azt egy maszkoló szimbólumra a TransformationMethod interfész mechanizmusán keresztül.
A Android Source Code (AOSP, 2026) szerint a PasswordTransformationMethod megvalósítása a TextPaint osztályt használja a maszkoló szimbólumok rajzolásához. A maszkoló szimbólum mérete megegyezik a mező betűméretével, ami megakadályozza az információ szivárgását a szóhosszon keresztül — minden karakter azonos szélességűnek tűnik. Ez fontos a beírt adatok hosszának elemzésén alapuló támadások elleni védelemhez.
<!-- 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" />
A Secure Text Entry mechanizmusa Androidban az android.text.method csomagban definiált TransformationMethod interfészen alapul. A PasswordTransformationMethod — egy beépített megvalósítás, amely felülírja a getTransformation() metódust, és egy lecserélt karaktersorozatot ad vissza megjelenítésre. Eközben az eredeti szöveg az Editable-ben változatlan marad — csak a vizuális megjelenítése változik.
Amikor a felhasználó beír egy karaktert, az EditText meghívja a dispatchEvent-et és továbbítja a karaktert az InputConnection-nek, amely hozzáadja azt az Editable-hez. Ezután az EditText meghívja az aktuális TransformationMethod getTransformation() metódusát, amely megkapja az eredeti CharSequence-t és visszaad egy SpannableString-et maszkoló szimbólumokkal. Ez a SpannableString jelenik meg a képernyőn az eredeti szöveg helyett. A kulcsfontosságú jellemző — maga az átalakítás nem változtatja meg az Editable tartalmát, ezért a getText().toString() hívásakor a ténylegesen beírt szöveg kerül visszaadásra.
A Android Developers Reference (2026) szerint a PasswordTransformationMethod minden karakterhez hozzáad egy MetricAffectingSpan-t, amely a glifet pontra cseréli. Ezek a span-ok nem befolyásolják a szöveg hosszát, így a kurzor és a beviteli pozíció helyesen megmarad még rejtett megjelenítés esetén is. Létezik VisiblePasswordTransformationMethod is, amely az utolsó beírt karaktert rövid ideig megjeleníti (hasonlóan az iOS-hez).
// PasswordTransformationMethod - beépített maszkolás
editText.transformationMethod = PasswordTransformationMethod.getInstance()
// VisiblePasswordTransformationMethod - utolsó karaktert mutatja
editText.transformationMethod = VisiblePasswordTransformationMethod.getInstance()
Láthatóság váltása (password visibility toggle) — egy funkció, amely lehetővé teszi a felhasználó számára, hogy ideiglenesen megjelenítse a beírt jelszót az űrlap elküldése előtti ellenőrzéshez. Androidban ez a funkció a TextInputLayout-on keresztül valósul meg az app:endIconMode="password_toggle" attribútummal. A szem ikonra kattintva a mező textPassword és textVisiblePassword között vált.
A password_toggle megvalósítása a TextInputLayout-ban automatikusan megváltoztatja a belső EditText inputType-ját és animálja az ikont (nyitott/csukott szem). Fontos megjegyezni, hogy ekkor a kurzor pozíciója visszaállhat, ezért a TextInputLayout elmenti és visszaállítja a pozíciót a módváltás után. Továbbá a látható jelszóra váltáskor az automatikus javítás és javaslatok nem kapcsolódnak be — TYPE_TEXT_VARIATION_VISIBLE_PASSWORD használatos, nem sima text.
A Material Design Guidelines (2025) szerint a jelszó megjelenítésére szolgáló ikonnak mindig láthatónak kell lennie, nem csak amikor a mező fókuszban van. A felhasználónak bármikor lehetősége kell legyen ellenőrizni a jelszót. Az ikon nem rejtheti el automatikusan a jelszót egy bizonyos idő után — csak a felhasználó műveletére.
<!-- 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>
A Secure Text Entry programozói beállítása Kotlinban az inputType beállításán vagy a setTransformationMethod()-on keresztül történik. Mindkét megközelítés ugyanarra az eredményre vezet, de a részletekben különböznek. Az inputType beállítása továbbá konfigurálja az automatikus javítást és javaslatokat, míg a setTransformationMethod csak a karakterek megjelenítésére hat.
// Programozói jelszó láthatóság váltás
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
}
// Kurzor pozíció visszaállítása
val cursorPos = editText.selectionStart
editText.setSelection(maxOf(0, cursorPos))
}
// Egyéni maszkolás — csak az utolsó 4 karaktert mutatja
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?) {}
}
A Secure Text Entry több szinten nyújt védelmet. A vizuális maszkolás megakadályozza a jelszó váll fölötti elolvasását (shoulder surfing) — a jelszólopás legelterjedtebb módszerét nyilvános helyeken. Az automatikus javítás kikapcsolása megakadályozza a jelszó mentését a felhasználói szótárba, ami kizárja annak szivárgását prediktív bevitelen keresztül. A képernyőképek elleni védelem (ha FLAG_SECURE be van kapcsolva) nem engedi más alkalmazásoknak a mező tartalmának rögzítését.
Azonban a Secure Text Entry nem teljes védelem. A bevitel lehallgatásán (keylogging) alapuló támadások rendszer szinten valódi karaktereket szerezhetnek az InputConnection-ből. A kártékony alkalmazások akadálymentesítési szolgáltatással olvashatják az EditText tartalmát, még akkor is, ha a karakterek rejtve vannak a képernyőn. Továbbá az SSL-sniffing az adatok szerverre történő továbbításakor felfedheti a jelszót, ha nem HTTPS-t használnak megfelelő tanúsítványellenőrzéssel.
Az OWASP Mobile Security Testing Guide (2025) szerint a jelszavak maximális védelméhez Androidban ajánlott: használjon inputType="textPassword" + kapcsolja ki az autofill-t a kritikus mezőkhöz; ne tárolja a jelszót a memóriában a szükségesnél tovább; ürítse ki a jelszómezőt az alkalmazás minimalizálásakor (onPause/onStop); használjon maszkolást akár a jelszó rövid idejű megjelenítésekor is.
| Védelmi szint | Secure Text Entry | További intézkedések |
|---|---|---|
| Vizuális lehallgatás | Karakterek maszkolása | Biometric auth, kerülje a shoulder surfing-et |
| Képernyőképek | Részleges (megvalósítástól függ) | FLAG_SECURE a Window-on |
| Keylogging | Nem véd | Használjon IME-t biztonságos bevitellel |
| Automatikus javítás/szótár | Kikapcsolva | alapértelmezetten kikapcsolva a password számára |
| Hálózati lehallgatás | Nem véd | HTTPS certificate pinning-nel |
Az Android fejlesztőknek néhány kulcsfontosságú gyakorlatot be kell tartaniuk a rejtett bevitellel való munka során. Először is, mindig használjon TextInputLayout-ot endIconMode="password_toggle"-val a jelszómezőkhöz — ez a Material Design modern szabványa. Másodszor, ne kapcsolja ki a jelszó megjelenítésének lehetőségét — a felhasználónak ellenőriznie kell tudnia, mit írt be, különösen kis billentyűzettel rendelkező mobil eszközökön.
A Secure Text Entry az automatikus kitöltés helyes beállítását is megköveteli. A jelszómezőkhöz mindenképpen adja meg az autofillHints="password" vagy autofillHints="newPassword" értéket, hogy a jelszókezelők helyesen tölthessék ki és menthessék az adatokat. Az új jelszó megerősítő mezőjéhez használja az autofillHints="newPassword" értéket, hogy a rendszer ne javasolja annak kitöltését a jelenlegi mentett jelszóval.
// Teljes jelszómező autofill-lel és tisztítással
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()
}
}
Gyakran Ismételt Kérdések
A textPassword elrejti az összes beírt karaktert és kikapcsolja az automatikus javítást. A textVisiblePassword szintén kikapcsolja az automatikus javítást, de nyílt formában jeleníti meg a karaktereket. A textVisiblePassword a jelszó láthatóságának váltásakor használatos — ez nem sima text, mert az automatikus javítás és javaslatok biztonsági okokból kikapcsolva maradnak.
Igen, hozzon létre egy egyedi osztályt, amely megvalósítja a TransformationMethod interfészt. Írja felül a getTransformation() metódust, amely egy CharSequence-t ad vissza a kívánt helyettesítő szimbólummal. Állítsa be a editText.transformationMethod = CustomPasswordTransformation() segítségével. Ne feledje, hogy a szimbólumnak biztonsági okokból monostélyszedésűnek kell lennie.
A mobil eszközökön kis képernyőkkel és érintőbillentyűzettel a jelszóbeviteli hiba valószínűsége jelentősen magasabb, mint asztali számítógépen. A beírt jelszó ellenőrzésének lehetősége csökkenti a beviteli hibák számát és mérsékli a jelszó-helyreállítási kérelmek számát, ami javítja a felhasználói élményt és csökkenti a támogatási terhelést.
Állítsa be a FLAG_SECURE jelzőt az Activity vagy Dialog ablakán: window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE). Ez megakadályozza a képernyőképek készítését és a képernyőfelvételt a teljes ablakra. Azonban vegye figyelembe, hogy ez a szokásos tartalom képernyőképeit is letiltja, ami nem kívánatos lehet.
Android 8.0-tól (API 26) kezdve az Autofill Framework automatikusan érzékeli a password mezőket az inputType alapján. A helyes működéshez állítsa be a importantForAutofill="yes" értéket és adja meg az autofillHints ("password", "newPassword", "emailAddress") értékeket. A Gboard és a jelszókezelők ezeket az attribútumokat használják a mentett jelszavak javaslatához.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is