¿Cómo se deshabilita autocomplete
en los principales navegadores para un input
(o form field
) específico ?
html
forms
browser
autocomplete
Brett Veenstra
fuente
fuente
Respuestas:
Firefox 30 ignora las
autocomplete="off"
contraseñas, optando por preguntar al usuario si la contraseña debe almacenarse en el cliente. Tenga en cuenta el siguiente comentario del 5 de mayo de 2014:De acuerdo con la documentación de Mozilla Developer Network , el atributo de elemento de formulario booleano
autocomplete
evita que los datos del formulario se almacenen en caché en navegadores antiguos.fuente
Además
autocomplete=off
, también puede hacer que los nombres de los campos de su formulario sean aleatorizados por el código que genera la página, quizás agregando una cadena específica de la sesión al final de los nombres.Cuando se envía el formulario, puede quitar esa parte antes de procesarlos en el lado del servidor. Esto evitaría que el navegador web encuentre contexto para su campo y también podría ayudar a prevenir ataques XSRF porque un atacante no podría adivinar los nombres de campo para el envío de un formulario.
fuente
$_SESSION['codefield_name'] = md5(uniqid('auth', true));
La mayoría de los principales navegadores y administradores de contraseñas (correctamente, en mi humilde opinión) ahora ignoran
autocomplete=off
.¿Por qué? Muchos bancos y otros sitios web de "alta seguridad" agregaron
autocomplete=off
a sus páginas de inicio de sesión "con fines de seguridad", pero esto en realidad disminuye la seguridad, ya que hace que las personas cambien las contraseñas en estos sitios de alta seguridad para que sean fáciles de recordar (y, por lo tanto, descifrar) ya que se completan automáticamente estaba rota.Hace mucho tiempo, la mayoría de los administradores de contraseñas comenzaron a ignorar
autocomplete=off
, y ahora los navegadores comienzan a hacer lo mismo solo para las entradas de nombre de usuario / contraseña.Desafortunadamente, los errores en las implementaciones de autocompletar insertan información de nombre de usuario y / o contraseña en campos de formulario inapropiados, causando errores de validación de formulario, o peor aún, insertando accidentalmente nombres de usuario en campos que el usuario dejó en blanco intencionalmente.
¿Qué debe hacer un desarrollador web?
Desafortunadamente, Chrome 34 intentará completar automáticamente los campos con usuario / contraseña cada vez que vea un campo de contraseña. Este es un error bastante malo que, con suerte, cambiarán el comportamiento de Safari. Sin embargo, agregar esto en la parte superior de su formulario parece deshabilitar la contraseña de autocompletar:
Todavía no he investigado a fondo IE o Firefox, pero estaré encantado de actualizar la respuesta si otros tienen información en los comentarios.
fuente
type='password'
campos en una página hizo que se ignorara automáticamente la función de "guardar contraseña" del navegador, lo que tenía mucho sentido ya que los formularios de registro tienden a pedir la contraseña dos veces cuando los formularios de inicio de sesión solo la solicitan una vez.A veces incluso autocomplete = off que no impide llenar de credenciales en los campos erróneos, pero no campo de usuario o apodo.
Esta solución alternativa se suma a la publicación de apinstein sobre el comportamiento del navegador.
arregle el autocompletado del navegador en solo lectura y configure el foco de escritura en foco (clic y pestaña)
Actualización: Mobile Safari establece el cursor en el campo, pero no muestra el teclado virtual. New Fix funciona como antes pero maneja el teclado virtual:
Demo en vivo https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
¿Porque el navegador llena automáticamente las credenciales en el campo de texto incorrecto?
Noto este comportamiento extraño en Chrome y Safari, cuando hay campos de contraseña en la misma forma. Supongo que el navegador busca un campo de contraseña para insertar sus credenciales guardadas. Luego, llena automáticamente (solo adivinando debido a la observación) el campo de entrada de texto más cercano, que aparece antes del campo de contraseña en DOM. Como el navegador es la última instancia y no puede controlarlo,
Esta corrección de solo lectura anterior funcionó para mí.
fuente
readonly
se elimine, la selección posterior del campo dará como resultado el retorno del autocompletado.Esto funcionará en Internet Explorer y Mozilla FireFox, la desventaja es que no es el estándar XHTML.
fuente
input type="password"
. Esperemos que ningún otro navegador elija eliminar esta funcionalidad.autocomplete="off"
en elform
es el único que trabajó para Chrome.La solución para Chrome es agregar
autocomplete="new-password"
a la contraseña del tipo de entrada. Por favor, consulte el siguiente ejemplo.Ejemplo:
Chrome siempre completa automáticamente los datos si encuentra un cuadro de tipo contraseña , lo suficiente para indicarlo
autocomplete = "new-password"
.Nota: asegúrese de
F12
que sus cambios surtan efecto, muchas veces los navegadores guardan la página en caché, esto me dio una mala impresión de que no funcionó, pero el navegador en realidad no trajo los cambios.fuente
Como otros han dicho, la respuesta es
autocomplete="off"
Sin embargo, creo que vale la pena decir por qué es una buena idea usar esto en ciertos casos como algunas respuestas a esto y duplicar preguntas han sugerido que es mejor no desactivarlo.
No se debe dejar a los usuarios detener los navegadores que almacenan números de tarjetas de crédito. Demasiados usuarios ni siquiera se darán cuenta de que es un problema.
Es particularmente importante desactivarlo en los campos para códigos de seguridad de tarjetas de crédito. Como esta página dice:
El problema es que si se trata de una computadora pública (cibercafé, biblioteca, etc.) es fácil para otros usuarios robar los datos de su tarjeta, e incluso en su propia máquina, un sitio web malicioso podría robar datos de autocompletado .
fuente
He resuelto la lucha interminable con Google Chrome con el uso de caracteres aleatorios. Cuando siempre renderiza autocompletar con una cadena aleatoria, nunca recordará nada.
Espero que ayude a otras personas.
fuente
autocompleteoff
clase al campo de entrada deseado.Tendría que rogar que difiera con las respuestas que dicen evitar la desactivación de autocompletar.
Lo primero que debe mencionar es que el autocompletado que no se deshabilita explícitamente en los campos del formulario de inicio de sesión es un error de PCI-DSS. Además, si la máquina local de un usuario se ve comprometida, cualquier dato de autocompletado puede ser obtenido trivialmente por un atacante debido a que se almacena en la memoria.
Ciertamente hay un argumento para la usabilidad, sin embargo, hay un equilibrio muy fino cuando se trata de qué campos de formulario deberían tener autocompletado deshabilitado y cuáles no.
fuente
Tres opciones: Primero:
Segundo:
Tercero (código javascript):
fuente
En una nota relacionada o en realidad, en la nota completamente opuesta:
fuente
Realmente usamos sasb la idea de para un sitio. Era una aplicación web de software médico para administrar el consultorio de un médico. Sin embargo, muchos de nuestros clientes eran cirujanos que usaban muchas estaciones de trabajo diferentes, incluidas terminales semipúblicas. Por lo tanto, querían asegurarse de que un médico que no comprende la implicación de las contraseñas guardadas automáticamente o que no está prestando atención no pueda dejar accidentalmente accesible su información de inicio de sesión. Por supuesto, esto fue antes de la idea de navegación privada que está comenzando a aparecer en IE8, FF3.1, etc. Aun así, muchos médicos se ven obligados a usar los navegadores de la vieja escuela en hospitales con TI que no cambiará.
Entonces, la página de inicio de sesión generó nombres de campo aleatorios que solo funcionarían para esa publicación. Sí, es menos conveniente, pero solo está golpeando al usuario sobre la cabeza por no almacenar información de inicio de sesión en terminales públicas.
fuente
Ninguna de las soluciones funcionó para mí en esta conversación.
Finalmente descubrí una solución HTML pura que no requiere Javascript , funciona en navegadores modernos (excepto IE; tenía que haber al menos 1 captura, ¿verdad?) Y no requiere que desactive el autocompletado para todo el formulario.
Simplemente desactive el autocompletado en
form
y luego actívelo para cualquierainput
que desee que funcione dentro del formulario. Por ejemplo:fuente
Solo establece
autocomplete="off"
. Hay una muy buena razón para hacer esto: ¡Desea proporcionar su propia funcionalidad de autocompletar!fuente
He estado probando soluciones infinitas, y luego encontré esto:
En vez de
autocomplete="off"
simplemente usarautocomplete="false"
¡Tan simple como eso, y funciona como un encanto en Google Chrome también!
fuente
Esto funciona para mi.
También podemos usar esta estrategia en otros controles como texto, seleccionar, etc.
fuente
Creo que
autocomplete=off
es compatible con HTML 5.Sin embargo, pregúntese por qué quiere hacer esto: puede tener sentido en algunas situaciones, pero no lo haga solo por hacerlo.
Es menos conveniente para los usuarios y ni siquiera es un problema de seguridad en OS X (mencionado por Soren a continuación). Si le preocupa que las personas tengan sus contraseñas robadas de forma remota, un registrador de pulsaciones de teclas aún podría hacerlo aunque su aplicación use
autcomplete=off
.Como un usuario que elige que un navegador recuerde (la mayoría de) mi información, me parecería molesto si su sitio no recordara el mío.
fuente
para las entradas que no desea que recuerden datos de formulario (
username
,password
, etc.) como se muestra a continuación:Espero que esto ayude.
fuente
$(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
onfocusout="this.setAttribute('readonly', 'readonly');"
La mejor solucion:
Evite el nombre de usuario (o correo electrónico) y la contraseña de autocompletar:
Prevenir autocompletar un campo:
Explicación:
autocomplete
continúa trabajando en<input>
,autocomplete="off"
no funciona, pero puede cambiaroff
a una cadena aleatoria, comonope
.Trabaja en:
Cromo: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 y 64
Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 y 58
fuente
autocomplete
atributo y todavía muestra entradas anteriores como sugerencias de autocompletar debajo de la entrada.autocomplete
, todavía recibo un menú desplegable de sugerencias basado en valores ingresados previamente. Está bien en el escritorio, pero no en Android Chrome.Un poco tarde para el juego ... pero me encontré con este problema y probé varios fallos, pero este funciona para mí encontrado en MDN
fuente
Agregar el
autocomplete="off"
a la etiqueta del formulario deshabilitará el autocompletado del navegador (lo que se escribió anteriormente en ese campo) de todos
input
campos dentro de ese formulario en particular.Probado en:
fuente
Agregar
autocomplete="off"
no va a ser suficiente.Cambie el atributo de tipo de entrada a
type="search"
.Google no aplica el autocompletado a las entradas con un tipo de búsqueda.
fuente
Utilice un nombre y una identificación no estándar para los campos, de modo que en lugar de "nombre" tenga "nombre_". Los navegadores no lo verán como el campo de nombre. La mejor parte es que puede hacer esto en algunos pero no en todos los campos y completará automáticamente algunos pero no todos los campos.
fuente
Para evitar el XHTML no válido, puede establecer este atributo usando javascript. Ejemplo usando jQuery:
El problema es que los usuarios sin javascript obtendrán la funcionalidad de autocompletar.
fuente
intente esto también si simplemente
autocomplete="off"
no funciona:fuente
No puedo creer que esto siga siendo un problema mucho después de que se haya informado. Las soluciones anteriores no funcionaron para mí, ya que Safari parecía saber cuándo el elemento no se mostraba o no estaba en la pantalla, sin embargo, lo siguiente sí funcionó para mí:
Espero que sea útil para alguien!
fuente
Entonces aquí está:
fuente
Este es un problema de seguridad que los navegadores ignoran ahora. Los navegadores identifican y almacenan contenido utilizando nombres de entrada, incluso si los desarrolladores consideran que la información es confidencial y no debe almacenarse. Hacer que un nombre de entrada sea diferente entre 2 solicitudes resolverá el problema (pero aún se guardará en la memoria caché del navegador y también aumentará la memoria caché del navegador). Pedirle al usuario que active o desactive las opciones en la configuración de su navegador no es una buena solución. El problema se puede solucionar en el backend.
Aquí está mi solución. Un enfoque que he implementado en mi marco. Todos los elementos de autocompletar se generan con una entrada oculta como esta:
Luego, el servidor procesa variables de publicación como esta:
Se puede acceder al valor como siempre
Y el navegador no podrá sugerir información de la solicitud anterior o de usuarios anteriores.
Todo funciona de maravilla, incluso si las actualizaciones de los navegadores quieren ignorar el autocompletado o no. Esa ha sido la mejor manera de solucionar el problema para mí.
fuente
Ninguno de los hacks mencionados aquí me funcionó en Chrome. Aquí hay una discusión sobre el problema: https://code.google.com/p/chromium/issues/detail?id=468153#c41
Agregando esto dentro de una
<form>
obra (al menos por ahora):fuente
maxlength="0"
evita que Firefox complete automáticamente el campo.Puede usar en la entrada.
Por ejemplo;
fuente