Página de inicio de sesión vs. htpasswd - ¿Cuál es más segura?
Pregunta
Dado un sistema de inicio de sesión simple (registrarse e inicio de sesión), cuál de las dos opciones es más segura:
- Uso de archivos htaccess y htpasswd para almacenar y autenticar a los usuarios
- Usar PHP para Crud y MySQL (o cualquier otra base de datos realmente) para almacenar la información
La información del usuario consiste puramente de nombre de usuario-password.
Por supuesto, se supone que el mejor caso se contabiliza con ambas opciones: las inyecciones de MySQL se tienen en cuenta, la contraseña es MD5/SHA1/MD5+SHA1/cualquier otro medio encriptado, etc.
En caso de que se pregunte, en el primer caso, PHP agregará credenciales de usuario al archivo htpasswd. (ver este Pregunta para una implementación de ejemplo).
Solución
Diría siempre el formulario de inicio de sesión (por el cual supongo que te refieres a la autenticación estándar basada en la sesión).
.htaccess
La autenticación transmite la contraseña en cada solicitud (por supuesto, SSL ayudaría aquí).htaccess
La autenticación no tiene ninguna tasa de limitación / protección de fuerza bruta de forma predeterminada en ApacheIniciar sesión desde
.htaccess
autenticación es un perra
Otros consejos
Casi no hay diferencia entre las 2 formas en términos de seguridad en el vuelo. Pero las preocupaciones de Pekka son válidas. Si solo desea usar HTTP Basic Auth (es decir, el cuadro emergente) en lugar de un formulario de inicio de sesión, puede hacerlo a través de PHP. buscando $_SERVER['PHP_AUTH_USER']
Y si no encuentra que envíe una respuesta 401 como:
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="MY REALM"');
header('HTTP/1.0 401 Unauthorized');
echo 'Please Contact us if you are having problems logging in';
exit;
} else {
//not their first time through
//check their username and password here
$username = trim($_SERVER['PHP_AUTH_USER']);
$password = trim($_SERVER['PHP_AUTH_PW']);
//do login
}
De esta manera, puede hacer la detección de límite de velocidad/fuerza bruta. Establezca una sesión, para que las contraseñas no se envíen con cada solicitud, y haga que registrar al usuario y rastrearlas mucho más fácilmente.