¿Cómo evitar revelar la contraseña en un formulario?

2

Recientemente descubrí que si usa el elemento inspeccionar para ver el código fuente del HTML, puede cambiar este <input type="password"/> a <input type="text"/> y luego puede ver la contraseña revelada. Entonces, ¿cómo puedo evitar eso en angularJS? o Javascript puro?

Cualquier oscuridad en la luz será apreciada.

    
pregunta napstercake 28.01.2016 - 17:47
fuente

8 respuestas

32

Esto suena como un mal caso de Security Theatre

  

El teatro de seguridad es la práctica de invertir en contramedidas destinadas a proporcionar la sensación de seguridad mejorada, al mismo tiempo que hace poco o nada para lograrlo.

Digo esto porque en toda realidad ...

  

Tener suficiente tiempo, esfuerzo y seguridad informática no es más que un retraso.

Por supuesto que se pone peor que eso. Javascript es un lenguaje basado en computadora, lo que significa que debe ser ejecutado por una máquina. Se le puede decir a esa máquina que ignore su Javascript.

Lo que esto significa realmente es que estás haciendo la pregunta incorrecta . Lo que realmente estás preguntando:

  

¿Cómo puede mantener sus formularios a salvo de alguien que usa contraseñas guardadas para completar el formulario y luego cambiar el tipo de formulario para leerlo?

Y a esta respuesta es bastante simple:
Mantenga su terminal segura y protegida. La única forma de evitar este tipo de ataque es no permitir que un atacante en un sistema con una contraseña guardada en primer lugar.

¿Por qué? Porque tienes un "espectro". Llamémoslo el espectro de seguridad en este ejemplo simplificado:
En la base de seguridad simple tiene lo siguiente:

Seguridad > ----------------------------------------- ----- < Facilidad de uso

En la mayoría de los casos, esto es lo que sucede:
El más Seguridad que tienes, el menos Facilidad de uso que tienes.
El más Facilidad de uso que tiene, el menos Seguridad que tiene.

Al utilizar un formulario que tiene una contraseña y dejarlo allí, está aumentando su Facilidad de uso y disminuyendo su < em> Seguridad

    
respondido por el Robert Mennell 28.01.2016 - 18:12
fuente
10

No hay forma de evitar que un atacante haga esto si ya está accediendo a las herramientas del desarrollador; simplemente puede pausar el javascript y continuar con lo que está haciendo. Lo mejor que puede hacer es borrar el cuadro de contraseña después de una pequeña cantidad de inactividad.

    
respondido por el William Dunne 28.01.2016 - 17:50
fuente
5

La conclusión es que no puedes, pero esto no es un problema tan grande como uno podría pensar .

Lo que hay que tener en cuenta es que cuando cambias la fuente en el depurador de un navegador (que es lo que estás describiendo), no se guarda en ninguna parte . Esto significa que el cambio solo afecta a la máquina en la que se está ejecutando el depurador. No puedo cambiar el campo de contraseña para 'texto' en la máquina de todos , solo el mío. También significa que el cambio solo tendrá efecto hasta la próxima vez que se cargue la página, por lo que incluso si lo configuro una vez, no puedo convertir una máquina en un robot de recolección de contraseña al hacer esto.

Otra cosa a tener en cuenta es que los scripts no tienen que cambiar el tipo de campo de contraseña para obtener su valor . Pueden obtenerlo a través de scripts antiguos, y hay ventajas muy reales de hacerlo de esa manera. Lo más importante es que, dado que no cambia el tipo de campo, el usuario no ve nada inusual, por lo que no se les advierte que algo podría estar mal.

Ahora, dicho todo esto, usted debe tener cuidado con los ataques de secuencias de comandos entre sitios , que pueden hacer el tipo de cosas que menciona (aunque todavía no es necesario cambiar el tipo de campo para obtener su valor). Ya hay una serie de mejores prácticas para evitar ataques XSS y los métodos comunes de evasión del filtro XSS son bien conocidos, por lo que también puede probarlos. Ninguno de estos detendrá el truco del depurador, pero como mencioné anteriormente, no es necesario detener el truco del depurador: XSS sí.

La conclusión es que no necesita estar alarmado por el depurador del navegador. Hay ataques relacionados que debería preocuparse, pero están bien estudiados, y ninguno de ellos involucra al depurador del navegador.

    
respondido por el The Spooniest 28.01.2016 - 20:15
fuente
3

No puede hacer esto porque todas las cosas están sucediendo en el lado del cliente y él tiene acceso casi total a su código (html, css, javascript) usando herramientas de desarrollador. Por lo tanto, puede pausar o detener javascript.

    
respondido por el Pawanrai9999 28.01.2016 - 18:09
fuente
3

Si está realmente preocupado por esto, podría eliminar las contraseñas por completo en su aplicación. Haga que el usuario ingrese su nombre de usuario o correo electrónico y que le envíe un correo electrónico con un enlace de inicio de sesión temporal.

    
respondido por el Sam 28.01.2016 - 19:32
fuente
2

No puedes. El formulario debe poder enviar la contraseña al servidor para su validación. Incluso si desarrolla algún tipo de técnica de ofuscación (no se recomienda), entonces, como dijo William Dunne, simplemente puede pausar / detener el Javascript.

Estás tratando de lograr seguridad a través de la oscuridad, y no funcionará.

    
respondido por el Mark Buffalo 28.01.2016 - 17:49
fuente
0

Es posible que puedas usar divs y otros elementos para crear tu propio campo de texto, como los campos de texto en los formularios de Google. Si hicieras esto, podrías configurarlo de manera que a medida que el usuario escriba, solo modifique el contenido de una variable de JavaScript cifrada y no escriba el campo de texto.

    
respondido por el reeddeer 29.01.2016 - 01:44
fuente
-3

En Javascript, para contraseñas ya guardadas, una forma podría ser:

en carga:

  1. guardar el valor de la entrada en una variable
  2. reemplace el valor de la entrada con una cadena aleatoria con la misma longitud

al iniciar sesión, haz clic:

  1. reemplaza el valor aleatorio con el valor que guardaste en el variabe
  2. enviar el formulario

Recuerda que:

Alguien puede leer la contraseña de la variable a través de javascript
por ejemplo:
console.log( passwordVAR );

    
respondido por el Zalk358 28.01.2016 - 23:12
fuente

Lea otras preguntas en las etiquetas