2009-11-16 12 views
5

Regularmente uso un formulario estándar para enviar información de inicio de sesión a través del método HTTP POST y luego validarlo usando php para verificar si los detalles son correctos. Utilizo un hash md5 en las contraseñas (y en ocasiones los nombres de usuario) para proporcionar cierto grado de seguridad, así que no estoy almacenando una contraseña sin procesar en mi código en caso de que sea vista por una persona no autorizada o algo así.Usando HTTP POST para formularios de inicio de sesión

Estoy bastante seguro de que acabo de hacer que alguien, incluso con una comprensión vaga de gemido de seguridad o al menos suspiro con exasperación.

Recientemente he estado trabajando en un foro que tiene una base de datos MySQL de usuarios y contraseñas, las contraseñas se almacenan como hash md5, pero me preocupa que al enviar el formulario de inicio de sesión mediante HTTP POST la posibilidad de que la información sea interceptada esta ahí. Soy consciente de las posibilidades de los ataques de inyección de MySQL y creo que estoy a salvo de cualquier ataque simple.

No soy un experto en seguridad cuando se trata de este tipo de cosas, pero me gustaría limitar las posibilidades de interceptar las contraseñas cuando se envían a través de HTTP.

No es un sitio grande, así que no estoy demasiado preocupado por los ataques y HTTPS no es realmente una posibilidad, entonces estoy buscando consejos sobre prácticas estándar que debería seguir al usar este método de envío de información de inicio de sesión.

Saludos

Respuesta

5

Usted tendría que hacer un hash del lado del cliente de la contraseña basado en una sal desafío proporcionado por el servidor. Este desafío debe ser diferente para cada solicitud.

De esta manera, incluso si se intercepta el hash de la contraseña, no sería útil para nada útil, ya que la siguiente autenticación requeriría un hash diferente.

De todos modos, HTTPS debe ser la manera correcta y segura.

+0

¿cuál es el mejor hasher (si es que es un término) para hacer esto usando php? y ¿cuál es la mejor manera de hash una entrada antes de enviarlo? Supongo, aunque podría estar equivocado, que me gustaría utilizar javascript para tomar las entradas de los usuarios y hash antes de enviar el formulario, pero si javascript está desactivado, esto no funcionaría. – andyface

+0

Normalmente me atengo a los algoritmos estándar, tanto para la seguridad como para la compatibilidad. PHP tiene una función sha1() que está bien para la mayoría de los usos. Obviamente necesitas un código del lado del cliente para hacer eso, ya sea javascript, un applet, un plugin de navegador, etc. Yo iría por JS. Siempre puede proporcionar un formulario de inicio de sesión sin script menos seguro. – Patonza

+0

https no se almacena en caché, ¿o sí? No creo que lo necesite para algún pequeño foro ... –

0

Una sugerencia básica sería: no confíes en nadie.

Por lo tanto, pruebe sus datos POSTed para la inyección de SQL, para Javascript en los campos de texto y evite las contraseñas simples almacenadas en su base de datos.

+0

"no confíes en nadie". - Nunca lo hago: D Gracias por los consejos. – andyface

0

Debe implementar HTTPS para todo tipo de inicios de sesión, hash o no.

Si la contraseña es hash pero se transmite por HTTP, cualquiera podría robar el hash y POST él mismo. Su solución no ofrece seguridad real más que oscurecer la contraseña real.

Siempre puede usar un certificado autofirmado si la implementación de HTTPS y las autoridades de certificación son un problema para usted.

Cuestiones relacionadas