Al usar el xhtml1-transitional.dtd
doctype, recopilar un número de tarjeta de crédito con el siguiente HTML
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
marcará una advertencia en el validador W3C:
no hay atributo "autocompletar".
¿Hay alguna forma estándar / W3C para deshabilitar el navegador de autocompletar en campos sensibles en un formulario?
Respuestas:
Aquí hay un buen artículo del MDC que explica los problemas (y las soluciones) para formar el autocompletado. Microsoft ha publicado algo similar aquí también.
Para ser honesto, si esto es algo importante para sus usuarios, 'romper' los estándares de esta manera parece apropiado. Por ejemplo, Amazon usa el atributo 'autocompletar' bastante, y parece funcionar bien.
Si desea eliminar la advertencia por completo, puede usar JavaScript para aplicar el atributo a los navegadores que lo admiten (IE y Firefox son los navegadores importantes) utilizando
someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
Finalmente, si su sitio está usando HTTPS, IE desactiva automáticamente el autocompletado (al igual que otros navegadores, que yo sepa).
Actualizar
Como esta respuesta todavía recibe bastantes votos a favor, solo quería señalar que en HTML5, puede usar el atributo 'autocompletar' en su elemento de formulario. Consulte la documentación en W3C para ello.
fuente
autocomplete
puede usarse no solo en elform
elemento , y eloff
valor funciona al menos enchromium-40.0.2214.115
Me sorprendería mucho si W3C hubiera propuesto una forma que funcionara con (X) HTML4. La función de autocompletar se basa completamente en el navegador y se introdujo durante los últimos años (mucho después de que se escribió el estándar HTML4).
Sin embargo, no se sorprendería si HTML5 tuviera uno.
Editar: Como pensé, HTML5 hace tener esa característica. Para definir su página como HTML5, use el siguiente doctype (es decir: ponga esto como el primer texto en su código fuente). Tenga en cuenta que no todos los navegadores admiten este estándar, ya que todavía está en forma de borrador.
fuente
HTML 4 : No
HTML 5 : sí
Referencia: W3
fuente
No, pero el autocompletado del navegador a menudo se activa por el campo que tiene el mismo
name
atributo que los campos que se completaron previamente. Si pudiera armar una forma inteligente de tener un nombre de campo aleatorio , la función de autocompletar no podría extraer ningún valor ingresado previamente para el campo.Si le diera a un campo de entrada un nombre como "
email_<?= randomNumber() ?>
", y luego tuviera la secuencia de comandos que recibe este bucle de datos a través de las variables POST o GET buscando algo que coincida con el patrón "email_[some number]
", podría realizar esto, y esto tendría ( prácticamente) éxito garantizado, independientemente del navegador .fuente
No, un buen artículo está aquí en Mozila Wiki .
Seguiría usando lo inválido
attribute
. Creo que aquí es donde el pragmatismo debería ganarse a la validación.fuente
¿Qué hay de configurarlo con JavaScript?
No es perfecto, pero su HTML será válido.
fuente
Sugiero capturar los 4 tipos de entrada:
Referencia:
fuente
:input
tambiénSi usa jQuery, puede hacer algo así:
y usa la clase autocompleteOff donde quieras:
Si desea que TODA su entrada sea
autocomplete=off
, simplemente puede usar eso:fuente
autocomplete
atributo (inválido) de una manera diferente que no sea html$('input.autocompleteOff').val('');
que parece estar bien.Otra forma, que también ayudará con la seguridad, es llamar al cuadro de entrada algo diferente cada vez que lo muestre: como un captha. De esa manera, la sesión puede leer la entrada de una sola vez y Autocompletar no tiene nada para continuar.
Solo un punto con respecto a la pregunta de rmeador sobre si debería interferir con la experiencia del navegador: desarrollamos sistemas de gestión de contactos y CRM, y cuando escribe los datos de otras personas en un formulario, no desea que sugiera constantemente sus propios detalles.
Esto funciona para nuestras necesidades, pero luego tenemos el lujo de decirles a los usuarios que obtengan un navegador decente :)
fuente
autocomplete="off"
Esto debería solucionar el problema para todos los navegadores modernos.En las versiones actuales de los navegadores Gecko, el atributo de autocompletar funciona perfectamente. Para versiones anteriores, volviendo a Netscape 6.2, funcionó con la excepción de los formularios con "Dirección" y "Nombre"
Actualizar
En algunos casos, el navegador seguirá sugiriendo valores de autocompletado incluso si el atributo de autocompletar está desactivado. Este comportamiento inesperado puede ser bastante desconcertante para los desarrolladores. El truco para forzar realmente la no autocompletación es asignar una cadena aleatoria al atributo , por ejemplo:
Como este valor aleatorio no es a
valid one
, el navegador se dará por vencido.Documetation
fuente
Usar un atributo aleatorio 'nombre' funciona para mí.
Restablezco el atributo de nombre al enviar el formulario para que aún pueda acceder a él por nombre cuando se envía el formulario. (usando el atributo id para almacenar el nombre)
fuente
Tenga en cuenta que existe cierta confusión sobre la ubicación del atributo de autocompletar. Se puede aplicar a toda la etiqueta FORM o a las etiquetas INPUT individuales, y esto no estaba realmente estandarizado antes de HTML5 (que permite explícitamente ambas ubicaciones ). Los documentos más antiguos, especialmente este artículo de Mozilla, solo mencionan la etiqueta FORM. Al mismo tiempo, algunos escáneres de seguridad solo buscarán autocompletar en la etiqueta INPUT y se quejarán si falta (incluso si está en el FORMULARIO principal). Aquí se publica un análisis más detallado de este desastre: Confusión sobre los atributos AUTOCOMPLETE = OFF en formularios HTML .
fuente
No es lo ideal, pero puede cambiar la identificación y el nombre del cuadro de texto cada vez que lo procesa; también tendría que rastrearlo en el lado del servidor para poder obtener los datos.
No estoy seguro de si esto funcionará o no, era solo un pensamiento.
fuente
Creo que hay una manera más simple. Cree una entrada oculta con un nombre aleatorio (a través de javascript) y configure el nombre de usuario para eso. Repita con la contraseña. De esta manera, su script de back-end sabe exactamente cuál es el nombre de campo apropiado, mientras mantiene el autocompletado en la oscuridad.
Probablemente me equivoque, pero es solo una idea.
fuente
fuente
Esta solución funciona conmigo:
si desea usar el autocompletado en esta región: agregue el
autocomplete="false"
elemento ex:fuente
Válido autocompletar apagado
fuente