Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 19 Noviembre 2020, 17:43 pm



Título: Lógica "Cambiar contraseña"
Publicado por: Leguim en 19 Noviembre 2020, 17:43 pm
Hola!

Quería saber cómo debería funcionar un algoritmo para que un usuario pueda modificar la contraseña...

La forma más segura posible (aunque creo que sería más simple de lo esperado)

Lo que tengo en mente es:

1. Input para pedir contraseña nueva
2. Input para pedir que repita la contraseña nueva
3. Input para pedir contraseña actual para poder validar la autenticidad del usuario que cambiara su propia clave

¿Sería todo, no?


Título: Re: Lógica "Cambiar contraseña"
Publicado por: .:Xx4NG3LxX:. en 20 Noviembre 2020, 04:05 am
Exacto, sería lo más simple, y yo no sé más que tu sobre desarrollo web ni nada... Pero podrías colocar una especie de "pregunta secreta". No se sí se adapta a tus gustos..


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Leguim en 23 Noviembre 2020, 19:55 pm
Exacto, sería lo más simple, y yo no sé más que tu sobre desarrollo web ni nada... Pero podrías colocar una especie de "pregunta secreta". No se sí se adapta a tus gustos..

Gracias!


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Kyrie Eleison en 23 Noviembre 2020, 21:17 pm
Así a bote pronto se me ocurre que hay -al menos- un paso previo.

Paso 0. ---> ¿El usuario tiene permisos/credenciales para cambiar la contraseña? Si es que SI ---> IR a paso 1. Si es que NO ---> se le echa fuera.

Un usuario -en general- no tiene porqué tener permisos para cambiar su propia contraseña. A veces es el administrador quien se la da, e incluso se la cambia cada cierto tiempo. Si; sé que es un poco tiquismiquis para redes/sistemas más o menos personales/domésticos, pero en entornos empresariales/corporativos es bastante normal que el usuario/operador de un terminal-PC no tenga privilegios de administrador para cambiar su propia contraseña (o instalar programas o compartir archivos, etc).

EDITO: también se me ocurre que el paso 3 suele implementarse antes del 1. De hecho suele ser el paso 3 concomitante con el que yo he llamado paso 0. Por ejemplo Linux para cambiar con sudo passwd ----- la contraseña de un usuario primero te pide tu propia contraseña sudo con la cual verifica si estás autorizado a cambiar la contraseña del otro (que puedes ser tú mismo), y posteriormente es cuando te pide la nuevas contraseña del usuario que sea (el que has llamado paso 1) y después verificarla (paso 2 tuyo).


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Leguim en 24 Noviembre 2020, 03:34 am
Así a bote pronto se me ocurre que hay -al menos- un paso previo.

Paso 0. ---> ¿El usuario tiene permisos/credenciales para cambiar la contraseña? Si es que SI ---> IR a paso 1. Si es que NO ---> se le echa fuera.

Un usuario -en general- no tiene porqué tener permisos para cambiar su propia contraseña. A veces es el administrador quien se la da, e incluso se la cambia cada cierto tiempo. Si; sé que es un poco tiquismiquis para redes/sistemas más o menos personales/domésticos, pero en entornos empresariales/corporativos es bastante normal que el usuario/operador de un terminal-PC no tenga privilegios de administrador para cambiar su propia contraseña (o instalar programas o compartir archivos, etc).

EDITO: también se me ocurre que el paso 3 suele implementarse antes del 1. De hecho suele ser el paso 3 concomitante con el que yo he llamado paso 0. Por ejemplo Linux para cambiar con sudo passwd ----- la contraseña de un usuario primero te pide tu propia contraseña sudo con la cual verifica si estás autorizado a cambiar la contraseña del otro (que puedes ser tú mismo), y posteriormente es cuando te pide la nuevas contraseña del usuario que sea (el que has llamado paso 1) y después verificarla (paso 2 tuyo).

Hola!

me estaba refiriendo a cambiar una contraseña en una -aplicación web-, igual no aclaré eso en el título del tema.


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Kyrie Eleison en 24 Noviembre 2020, 13:09 pm
Sí, pero es que incluso para una aplicación web tiene sentido.

Por ejemplo la aplicación web de mi banco para consultas on line además de pedirme la contraseña para entrar y hacer operaciones, si lo que deseo es cambiar la contraseña, me la vuelve a pedir aunque ya esté dentro; además de pedirme la nueva contraseña.

Pero es que, sin ir más lejos, la aplicación web de este foro, además de pedirte la contraseña para entrar a trabajar normalmente, si lo que quieres es cambiar tu contraseña en: Perfil ---> Configuración de la cuenta
se ve que hay dos casillas para la nueva contraseña: Escoge contraseña y Verifica contraseña
pero además al final del todo está la casilla: Contraseña actual
con la nota aclaratoria "Por razones de seguridad, debes introducir tu contraseña actual para hacer cualquier cambio a tu perfil."

Es una medida de seguridad muy normal, básica y prácticamente universal en cualquier aplicación mínimamente seria. O éso creo.


Título: Re: Lógica "Cambiar contraseña"
Publicado por: #!drvy en 24 Noviembre 2020, 13:31 pm
Lo unico que faltaria añadir es asegurarte de que proteges el formulario contra CSRF.

https://owasp.org/www-community/attacks/csrf
https://es.wikipedia.org/wiki/Cross-site_request_forgery


@Kyrle Eleison, eso ya lo tiene contemplado. Si te fijas, su punto 3 es "Input para pedir contraseña actual".

Otra cosa es lo que has comentado anteriormente de que el usuario debe tener permisos para editar su propia contraseña. A mi esto me parece un error. No se debe impedir cambiar la contraseña. El usuario debe poder introducir y/o cambiar su propia contraseña en cualquier momento. No se me ocurre ningún caso donde sea beneficioso limitar esa capacidad y se me ocurren unos cuantos donde es perjudicial y hasta ilegal.

Saludos


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Danielㅤ en 24 Noviembre 2020, 15:49 pm
Hola, lo de pedir nuevamente la contraseña es por el robo/suplantación de cookies y por la sesión activa... alguien puede dejar la sesión activa y olvidarse de cerrarla, viene otra persona y puede tomar esa sesión pero al pedir contraseña para cualquier cambio, entonces no podrá hacer mucho con solamente tener la sesión activa y ahí es cuando juega un papel importante el pedir nuevamente la contraseña para que el foro pueda comprobar que verdaderamente el dueño de la cuenta es el que está intentando hacer un cambio a su perfil.


Saludos


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Kyrie Eleison en 24 Noviembre 2020, 17:04 pm
@Kyrle Eleison, eso ya lo tiene contemplado. Si te fijas, su punto 3 es "Input para pedir contraseña actual".
Sí, pero a mi ésto me parece un error desde el punto de vista de la secuencia correcta de órdenes dentro de un programa. Porque ¿qué pasa si el programa ya ha validado los pasos 1) y 2) cuando se encuentra con que el paso 3) no cumple? ¿Deja la nueva contraseña aunque el propietario no se haya autentificado -al no verificar su contraseña-? ¿Destruye todo el proceso y vuelve al paso 1? ¿No deja ninguna contraseña?

No. Lo lógico es que PRIMERO valide que el usuario tiene permisos para cambiar la contraseña, y después, SI Y SOLO SI el usuario tiene credeneciales... le permita continuar.


Otra cosa es lo que has comentado anteriormente de que el usuario debe tener permisos para editar su propia contraseña. A mi esto me parece un error. No se debe impedir cambiar la contraseña. El usuario debe poder introducir y/o cambiar su propia contraseña en cualquier momento. No se me ocurre ningún caso donde sea beneficioso limitar esa capacidad y se me ocurren unos cuantos donde es perjudicial y hasta ilegal.

Saludos

Debe poder... si cuenta con los permisos necesarios. En una cuenta personal en su propio ordenador su propia contraseña inicial es el permiso.

En una cuenta de empresa o societaria donde es un mero usuario al que otros le han dado permiso, esos otros son los que deciden cual es su contraseña y cómo y para qué puede  usarla... y cuando se la pueden cambiar y comunicárselo.
En un ordenador de otros en el que simplemente estás trabajando... ese otro es el que impone las reglas y tú simplemente te callas -o dices sí bwuana-.

En tu propio ordenador claro que nadie debe impedir cambiar tu propia contraseña. De hecho si alguien lo ha hecho es que te ha hackeado tu ordenata.





Hola, lo de pedir nuevamente la contraseña es por el robo/suplantación de cookies y por la sesión activa... alguien puede dejar la sesión activa y olvidarse de cerrarla, viene otra persona y puede tomar esa sesión pero al pedir contraseña para cualquier cambio, entonces no podrá hacer mucho con solamente tener la sesión activa y ahí es cuando juega un papel importante el pedir nuevamente la contraseña para que el foro pueda comprobar que verdaderamente el dueño de la cuenta es el que está intentando hacer un cambio a su perfil.


Saludos
Por supuesto, lo sé. No lo he escrito como crítica, sino precisamente como ejemplo de caso de porqué no es sólo útil, sino conveniente el poner esa restricción. Ejemplo fácil: en un entorno de ordenador de empresa, tengo la sesión activa, me entran ganas horrorosas de mear, me voy sin bloquear sesión... pasa por allí el gilip... de turno... o el que me la tiene jurada porque le superé en el puesto...
...
... va y me jo..e el asunto cambiándome la contra...  :-(  y la cara de gilip... que se te queda...




Mod: No hacer doble post. Usar el botón "Modificar".


Título: Re: Lógica "Cambiar contraseña"
Publicado por: #!drvy en 24 Noviembre 2020, 17:18 pm
Citar
¿Deja la nueva contraseña aunque el propietario no se haya autentificado -al no verificar su contraseña-? ¿Destruye todo el proceso y vuelve al paso 1? ¿No deja ninguna contraseña?

Eso no tiene ningún sentido y dudo que haya siquiera 1 cms que lo haga así. Obviamente verificará la contraseña antigua antes de asignar la nueva. El orden de los inputs de poco importa sobre todo si luego tiene más campos que rellenar.

Citar
En una cuenta de empresa o societaria donde es un mero usuario al que otros le han dado permiso, esos otros son los que deciden cual es su contraseña y cómo y para qué puede  usarla... y cuando se la pueden cambiar y comunicárselo.

Insisto. En ningún caso se debe limitar cuando un usuario cambia su contraseña. Es perjudicial para todo el flow de trabajo y es síntoma de problemas de estructura y control en el entorno empresarial. ¿Que pasa si la contraseña del usuario ha sido comprometida y el usuario es el primero en darse cuenta? No la puede cambiar hasta que no avise a sistemas. ¿Que pasa si el usuario quiere llevar por su propia cuenta el cambio periódico de contraseña? La administración debe ser capaz de cambiar la contraseña o resetearla, pero en ningún caso se debe limitar que el usuario pueda cambiar de contraseña... puede ser hasta ilegal.

Saludos


Título: Re: Lógica "Cambiar contraseña"
Publicado por: @XSStringManolo en 24 Noviembre 2020, 17:47 pm
Ten cuidado con los IDOR. Son bastante comunes en este tipo de funcionalidad.

Verifica que el usuario que está cambiando la contraseña esté cambiando la de su cuenta.

También deberías pedir confirmación por correo una vez se han realizado los pasos planteados. Mandas un enlace válido durante 15 mins para que pinche el usuario. Mete captcha si quieres más seguridad contra brute force.

Es también buena práctica evitar user/email enumeration.

Evita utilizar GET (te quita de 3 o 4 fallos de seguridad)

Asegúrate que la página es HTTPS.

Evita clickjacking y cors en esa página.

Comprueba que la sesión no esté expirada.


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Kyrie Eleison en 24 Noviembre 2020, 18:05 pm
Repito por si no me han leido. (Que parece que no)

En un entorno de PC propio casero tú eres el dueño. Tu haces y deshaces contraseñas y nadie te dice nada.

En un entorno empresarial o corporativo en el que tú NO ERES dueño del PC ni del software que utilizas ni... de nada de nada. El dueño es... efectivamente lo has acertado: ¡EL JEFE O EMPRESA!

Y puede hacer o deshacer, decir que programas puedes usar y cuales no y cambiarte o ponerte contraseñas y decir como y cuando puedes usarlas y para hacer según qué cosas. Porque SON SUS MAQUINAS Y SUS SISTEMAS, y decide como y cuando y por quien se pueden utilizar. Como el dueño de una fábrica decide qué operarios pueden utilizar y en qué condiciones la excavadora, la taladradora o la soldadora de perfiles IL de autos.

Y en ese entorno, la empresa o sea el jefe o su administrador de sistemas... puede imponerte las contraseñas que quiera, cuando quiera, como quiera, e impedirte que las cambies tu a tu conveniencia.

Y por supuesto que es legal. Es completamente legal que el dueño de los medios de producción decida cómo, cuando, por quién y en qué condiciones pueden ser utilizados aquellos.



Título: Re: Lógica "Cambiar contraseña"
Publicado por: #!drvy en 24 Noviembre 2020, 19:43 pm
Citar
Y por supuesto que es legal. Es completamente legal que el dueño de los medios de producción decida cómo, cuando, por quién y en qué condiciones pueden ser utilizados aquellos.

El caso es que el compañero es el que esta desarrollando el entorno. Esto no es un entorno empresarial, es un entorno en desarrollo y el tiene la protestad de decidir que, porque, donde y cuando, no le están imponiendo ninguna condición, si no, ya la habría mencionado.

Que una empresa decida lo que hacer con la información no implica que sea legal o que sea buena practica. No toda la información que almacena una empresa se trata de la misma forma, hay datos amparados por ley que pueden ser protegidos tanto por el cliente como por el trabajador. E incluso fuera del ámbito de datos privados, hay normas mínimas sobre almacenamiento de información y cifrado. Esto es un foro de seguridad, aquí se trata de mejor la seguridad, no de cumplir con las expectativas de un jefe "ignorante".


https://www.boe.es/buscar/act.php?id=BOE-A-2008-979#a93

Saludos


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Kyrie Eleison en 24 Noviembre 2020, 20:41 pm
Por supuesto que el compañero decide cual es su entorno y que nivel de seguridad quiere poner.

Pero supongo que desea programar algo que se aproxime a la realidad lo más posible. Y por eso le he dado mi opinión de cómo yo pienso que se suelen hacer las cosas lo mejor posible. No como una exigencia o una pega a su trabajo sino como una forma de mejorarla y acercarla lo más posible a lo que se hace en la realidad.

Respecto a lo que sea una buena práctica, o sea legal, o sea moral... No sé. Ya he puesto el ejemplo de que es ALGO QUE SE HACE HACE EN ESTE MISMO FORO.

Si te molestas en releerme verás que he puesto el ejemplo de cómo en este foro para cambiar tu propia contraseña en Perfil ---> Configuración de cuenta...
... ¡vosotros mismos exigís!... otra vez la contraseña... y por tanto... exigís un usuario autorizado para poder cambiar contraseña...

Y que éso que exigís no es nada más que la implementación de lo que yo había llamado paso 0 unido (pero previo) al paso 3 del compañero que solicitaba opiniones.

Ahora si te parece que esa exigencia de seguridad tan simple y que vosotros mismos exigís sea inmoral, amoral, no legal, etc etc... pues tú mismo, no sé entonces que haces colaborando como moderador en un sitio que practica esas conductas tan poco éticas o morales o legales (según tú).

No sé porqué has llevado este post a este punto cuando solamente se trataba de dar una opinión para mejorar.

Es más tú mismo has dicho (sic): Esto es un foro de seguridad, aquí se trata de mejor la seguridad, no de cumplir con las expectativas de un jefe "ignorante".

¿Y no te parece que, independientemente de quién sea el jefe, se mejora la seguridad de una aplicación proponiendo que para cambiar la contraseña de un usuario PRIMERO se comprube la potestad del usuario para cambiarla, antes de proseguir con el programa? Aunque sólo sea para ahorrar tiempo de ejecución: ¿para qué tomarse la molestia de hacer inputs de contraseña y repetición ANTES de saber si el usuario está capacitado para hacer el cambio? ¿y no al revés?
Primero:paso 0 ¿puede el usuario cambiar la contraseña? SI ---> procédase a petición/verificación de nuevas contraseñas /// NO ----> usuario a tomar x saco. ¿Tan descabellada te parece la propuesta que he hecho?

Porque si te molestas en releerme desde el principio... de eso es de lo que iba mi (intento de) contribución.


Título: Re: Lógica "Cambiar contraseña"
Publicado por: #!drvy en 24 Noviembre 2020, 21:39 pm
Citar
Porque si te molestas en releerme desde el principio... de eso es de lo que iba mi (intento de) contribución.

Pues bien, vamos a tu primer post en este tema.


Paso 0. ---> ¿El usuario tiene permisos/credenciales para cambiar la contraseña? Si es que SI ---> IR a paso 1. Si es que NO ---> se le echa fuera.

Un usuario -en general- no tiene porqué tener permisos para cambiar su propia contraseña. A veces es el administrador quien se la da, e incluso se la cambia cada cierto tiempo. Si; sé que es un poco tiquismiquis para redes/sistemas más o menos personales/domésticos, pero en entornos empresariales/corporativos es bastante normal que el usuario/operador de un terminal-PC no tenga privilegios de administrador para cambiar su propia contraseña (o instalar programas o compartir archivos, etc).

Ahí no estás hablando de una contraseña actual, estás hablando de permisos para cambiar su propia contraseña y mencionas como en X entornos es bastante normal (según tú) que el terminal no tenga privilegios para cambiar su propia contraseña. ¿Si o no? Tambien mencionas lo de obligarlo a introducir la contraseña actual, después, es un posdata.

Yo te indique, que el hecho de introducir la contraseña antigua, el compañero ya lo tenía contemplado, tal y como se puede apreciar en el primer post de este tema. Y también hice referencia al tema de los permisos, sobre el cual, di mi opinion:

@Kyrle Eleison, eso ya lo tiene contemplado. Si te fijas, su punto 3 es "Input para pedir contraseña actual".

Otra cosa es lo que has comentado anteriormente de que el usuario debe tener permisos para editar su propia contraseña. A mi esto me parece un error. No se debe impedir cambiar la contraseña. El usuario debe poder introducir y/o cambiar su propia contraseña en cualquier momento. No se me ocurre ningún caso donde sea beneficioso limitar esa capacidad y se me ocurren unos cuantos donde es perjudicial y hasta ilegal.

Saludos

¿Si o no?


Entonces, quizás, deja de estar tan a la defensiva y separa una cosa de otra, pues son dos cosas bien distintas.



Citar
¿Y no te parece que, independientemente de quién sea el jefe, se mejora la seguridad de una aplicación proponiendo que para cambiar la contraseña de un usuario PRIMERO se comprube la potestad del usuario para cambiarla, antes de proseguir con el programa? Aunque sólo sea para ahorrar tiempo de ejecución: ¿para qué tomarse la molestia de hacer inputs de contraseña y repetición ANTES de saber si el usuario está capacitado para hacer el cambio? ¿y no al revés?

Porque en un POST (véase petición HTTP), los datos se envian a la vez, no se envian por separado. Porque en cualquier aplicación moderna, la lógica se puede separar y es independiente de la presentación. En este mismo foro, como has mencionado, tienes el ejemplo.


Citar
No sé porqué has llevado este post a este punto cuando solamente se trataba de dar una opinión para mejorar.

Me parece genial que tengas una opinión y tal y cuál pascual. Pero esto es un foro y aquí estamos para debatir y para que todos expresemos nuestras opiniones. Tú das tu opinión, yo doy la mía, que puede contradecir la tuya, tú puedes exponer razones o contradecir la mía y así va el proceso. Vamos, lo que es un foro de toda la vida =)

Saludos


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Kyrie Eleison en 24 Noviembre 2020, 22:09 pm
Tienes toda la razón.


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Danielㅤ en 24 Noviembre 2020, 23:53 pm
Citar
Porque SON SUS MAQUINAS Y SUS SISTEMAS, y decide como y cuando y por quien se pueden utilizar

Si usamos tu planteo, el brujo tiene todo el derecho y permiso de modificar nuestras contraseñas cuando a él se le dé la gana, cuando quiera, como quiera y a quien quiera, porque el es el dueño de su foro y de su hosting.


Saludos


Título: Re: Lógica "Cambiar contraseña"
Publicado por: Leguim en 25 Noviembre 2020, 04:33 am
Sí, ya tengo un sistema que me protege de ataques CSRF. Lo que sí no creo que haga eso lo del mail, por ahí a modo de aviso no tanto de seguridad quizás si mandara un mail diciéndole que cambió la contraseña correctamente y eso... (como dije es a nivel de aviso, no de seguridad)...

Gracias por todas las ayudas y sugerencias.