Pregunta

página de inicio de mi aplicación web tiene una casilla de verificación RememberMe . Si el usuario lo, yo willl almacenar el correo-ID y contraseña en las cookies. Este es mi código:

if (this.ChkRememberme != null && this.ChkRememberme.Checked == true)
   {
     HttpCookie cookie = new HttpCookie(TxtUserName.Text, TxtPassword.Text);
     cookie.Expires.AddYears(1);
     Response.Cookies.Add(cookie);
   }

Lo que yo quiero saber es:

  • ¿Es seguro para almacenar las contraseñas en las cookies?
  • ¿Cuál es la forma correcta de hacer lo mismo?
  • ¿Cuáles son las mejores prácticas en el establecimiento de tiempo para una galleta?
¿Fue útil?

Solución

que no es seguro para almacenar contraseñas en las cookies ya que están disponibles como texto sin formato.

Un lugar bueno para encontrar algunas respuestas acerca de las cookies es Cookies central. Por la pertenencia se utiliza por lo general una galleta con una larga cadena denominada 'símbolo' que se emite desde el sitio web cuando nos proporcione su nombre de usuario y contraseña. Más información sobre el proceso que se puede encontrar en este artículo . Cuando se utiliza la autenticación de formularios en ASP.NET puede establecer la cookie de autenticación de la siguiente manera:

FormsAuthentication.SetAuthCookie(userName, isPersistanceCookie);

El segundo parámetro se utiliza para "Remember Me" funcionalidad - si es cierto que va a crear cookies permanentes que durarán después de salir del sitio. También puede manipular mediante programación la cookie de esta manera:

HttpCookie authCookie =
  HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];

Otros consejos

No! No guarde las contraseñas en las cookies!

En ASP.NET, el uso

FormsAuthentication.SetAuthCookie(username, true);

El segundo valor del argumento determina si la cookie es persistente (el me recuerdan el valor de la casilla de verificación).

No, no es remota segura. Usted no tiene ninguna garantía de que las cookies no se almacenan en texto plano (y, de hecho, la mayoría de las implementaciones hacer guardarlos como texto sin formato).

Eso sí, "acuérdate de mí" es inherentemente insegura, ya que cualquier persona que intercepte la cookie tiene acceso a la aplicación. Sin embargo, la exposición de la contraseña de un usuario lleva un paso más abajo en la escalera de la inseguridad. :-) Y, probablemente, hace que el usuario realmente loco, si se enteran.

Puedo utilizar una cadena cookie cifrada que incorpora el nombre de cuenta del usuario combinada con una señal de que no es en absoluto (otra) asociada a la cuenta del usuario, excepto en una tabla en mi servidor. Cuando el usuario vuelve al sitio, que descifrar la cookie y mirar hacia arriba si esa señal es, de hecho, asociado a esa cuenta. El token (y por lo tanto cookie) cambia cada inicio de sesión automático, e invalida la utilizada para que el acceso automático. (Hay una relación muchos-a-uno entre los símbolos y de la cuenta, para permitir el acceso automático desde múltiples ubicaciones. Se podría limitar que si te gusta.) Tiempo de Fichas a cabo si no se utilizan dentro de X días. (Esto no sólo se lleva a cabo mediante la limitación de la duración de la cookie;. Está hecho del lado del servidor también) Hay algunas otras cosas que me tiro en ahí para hacer la vida un bits difícil para alguien que trata de decodificar la cookie (tener éxito descifrado es) o utilizar una cookie robado (que no requiere descifrado), pero no tiene sentido en ir exageración (de nuevo, "Remember me" es un medio seguro).

Me usar que en un sitio donde la seguridad robusta no es realmente necesario (obviamente) y que tiene un gran número de clientes dinámico en IP, y por lo que no trato de bloqueo hacia abajo a una IP. Pero incluso el bloqueo hacia abajo a una IP no significa que sea seguro, sólo se reduce la superficie de ataque un poco.

Es posible que se pregunte por qué tengo el nombre de usuario en la cookie. Por "Recuérdame" fines rectos, yo no recomendaría tener allí, incluso si está encriptada (después de todo, es la mitad de la pareja de autenticación en un sistema de nombre de usuario + contraseña). Yo estaba un poco sorprendido de encontrar en nuestra cookie cuando miré el formato cuando recordándome cómo lo hicimos esto para esta pregunta; pero luego vi los comentarios que explican por qué está ahí y hay razones no relacionadas con "recuérdame" (no necesariamente persuasiva razones, en retrospectiva, pero razones).

En una nota final, el hecho de que "acuérdate de mí" es inherentemente inseguro es una de las muchas razones por las cuales los registros del sitio son muy importantes, y por qué debe requerir una nueva verificación de contraseña en el proceso de permitir cambios en la información importante de la cuenta (para hacer que sea más difícil para alguien de haber robado la cookie para tomar posesión de la cuenta).

Esto es lo que nunca debe hacer, ya que es muy fácil cambiar el valor de una cookie y enviar de vuelta al servidor. Incluso el almacenamiento de "usuario está en looged como '' naivists" en una cookie es un error, porque después podría cambiar a "usuario está conectado como 'Pandiya Chendur'".

Lo que puede hacer en las cookies es información dar a los clientes que, incluso si cambia, no tiene sentido en el servidor. Por ejemplo - color favorito, el primer diseño de la página etcétera.

Se puede darles ID de sesión que se almacena en una cookie, porque no pueden hacer nada mejor para ellos, si cambian el valor de algo más (a menos que sepan un ID de sesión válida de otra sesión).

¿Cuál de Microsoft MSDN dice sobre el uso de las cookies :

  

Los problemas de seguridad con las galletas son   similares a los de la obtención de datos de   el cliente. En su aplicación,   galletas son otra forma de entrada de usuario   y por lo tanto sujetos a examen   y spoofing. Una lata de usuario como mínimo   ver los datos que se almacenan en una   galleta, ya que la cookie está disponible   en el propio ordenador del usuario. El usuario   También puede cambiar la cookie antes de la   explorador envía a usted.

     

Nunca se debe almacenar datos sensibles   en una cookie, como nombres de usuario,   contraseñas, números de tarjetas de crédito, etc.   en. No ponga nada en una cookie   que no debería estar en manos de una   usuario o de alguien que de alguna manera podría   robar la cookie.

     

Del mismo modo, sea sospechosa de   la información se obtiene de una cookie.   No asuma que los datos es la   mismo que cuando lo escribió a cabo; utilizar el   mismas garantías en trabajar con la galleta   valores que lo haría con los datos de que una   usuario ha escrito en una página Web. los   ejemplos anteriormente en este tema mostraron   HTML codifica el contenido de una cookie   antes de mostrar el valor de una página,   como lo haría antes de mostrar cualquier   la información que recibe de los usuarios.

     

Las cookies son enviados entre el navegador y el   servidor como texto plano, y cualquier persona que   puede interceptar el tráfico de Internet lata   leer la cookie. Se puede establecer una cookie   propiedad que hace que la galleta para que se   sólo se transmite si la conexión   utiliza el protocolo Secure Sockets Layer (SSL).   SSL no protege la cookie de   siendo leído o manipulados mientras que es   en el ordenador del usuario, pero lo hace   prevenir la cookie puedan ser leídos   mientras que en el tránsito debido a que la cookie es   cifrada. Para más información, ver   Prácticas básicas de seguridad para la Web   Aplicaciones.

No es seguro para almacenar contraseñas en las cookies causa en la que están disponibles como texto sin formato. pero si su criterio es hacerlo o cualquier requerimiento del usuario está ahí, puede hacerlo mediante el cifrado de las cuerdas. que pueden hacer que este lo suficientemente seguro.

pero no se recomienda,

Creo que se necesita para crear una ficha con nombre de usuario y una cadena de autenticación cifrada que se obtiene de las ventanas de identidad. No hay necesidad de almacenar la contraseña en la galleta. Tenemos nuestra aplicación que almacena nombre de usuario y la cadena autenticado

Por cierto, almacenar contraseñas no es segura en todas partes, tanto el cliente como en el servidor.

Usted no necesita hacer eso.

Branislav dijo, y ...

Además de no poner los datos sensibles en sus cookies, debe también garantizar su seguridad mediante la colocación de, al menos, lo siguiente en su web.config:

<httpCookies httpOnlyCookies="true" />

Para más detalles ver: ¿Cómo exactamente se configura httpOnlyCookies en ASP.NET?

No es en absoluto seguro. Las cookies se almacenan en el ordenador cliente, que puede ser manipulado.

  • Si utiliza SSL, lo que debería si está transmitiendo ninguna información segura, que elimina una tercera parte de la escucha de su tráfico web. Este sería el mismo problema independientemente de almacenar unas credenciales de los usuarios en una cookie porque cuando se inicia sesión su envío de su nombre de usuario y contraseña para el servidor de todos modos, en la que asumen el servidor hashes de TI y la compara con la contraseña con algoritmo hash que tiene para ese usuario.

  • Otros dominios nunca será capaz de leer la cookie debido cruzada origen de manera que no es un problema.

  • Así que en realidad el único "agujero de seguridad" si se quiere llamar así es que si alguien gana físicamente el acceso a su ordenador. Si eso sucede que es más probable va a obtener cualquier información que quiere de todos modos esa persona. ¿Cómo se explica cuando Chrome rellenos automática de fuera formas de acceso para usted, es que seguro? Estoy seguro de que no se están almacenando en texto plano, pero que ni siquiera importa. Si vas a una página que se llena de automóviles de cromo puede simplemente copiar la contraseña de la forma y el aspecto en que ahora tiene que las personas contraseña.

  • Todo se reduce a la forma "segura" se necesita que sea. Estoy de acuerdo que el cifrado de información a los usuarios con una caducidad como una muestra es la mejor manera de llamadas de servicio autenticar y que proporciona flexibilidad. Yo no veo el problema con el almacenamiento de credenciales de inicio de sesión en una cookie.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top