Skip to content

14- Android keyboard cache issues

Esto sería semejante al autocompletado de los formularios en las páginas web.

Qué es el keyboard cache: los teclados de Android (Gboard, SwiftKey, etc.) tienen un motor de sugerencias/autocorrección que aprende y cachea lo que el usuario escribe, para ofrecer predicciones futuras. Este cache persiste fuera del control de la app — vive en el almacenamiento propio del IME (Input Method Editor), no en el sandbox de la app.

El problema es no configurar bien los formularios de input de contraseñas e info sensible ya que los teclados podrían:

  • Guardar palabras/fragmentos tipeados en su diccionario personal.
  • Ofrecerlos como sugerencia en OTRO campo, en OTRA app, más adelante — un password real podría aparecer como sugerencia de autocompletado en un chat de WhatsApp, por ejemplo.
  • Persistir en el propio storage del teclado, potencialmente legible por quien tenga acceso al dispositivo (backup, forense, malware con acceso al IME).

SI nos vamos a /res/layout y por ejemplo, vemos que se está usando android:password="true" que está obsoleto:

xml
<EditText
	android:textColorHint="#cccccc"
	android:id="@+id/loginscreen_password"
	android:background="@android:drawable/editbox_background"
	android:padding="20dp"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:layout_marginLeft="20dp"
	android:layout_marginRight="20dp"
	android:hint="Password"
	android:password="true"
	android:drawableLeft="@android:drawable/ic_lock_lock"
	android:layout_weight="1"/>

La forma correcta sería

xml
android:inputType="textPassword"

Además en activity_change_password.xml lo mismo

xml
<EditText
	android:textSize="20sp"
	android:textColorHint="#cccccc"
	android:id="@+id/editText_newPassword"
	android:background="@android:drawable/editbox_background"
	android:padding="20dp"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:layout_marginLeft="20dp"
	android:layout_marginRight="20dp"
	android:hint="New Password"
	android:password="true"
	android:drawableLeft="@android:drawable/ic_lock_lock"
	android:layout_weight="1"/>

En activity_do_transfer.xml tendríamos para editText_amounteditText_Phone lo mismo pero sin inputType en absoluto.

Notas personales de seguridad ofensiva.