Pregunta

Tengo un script PHP que se ejecuta como un programa CGI y HTTP Authenticate El encabezado se come y se escupe.Entonces me gustaría implementar algún tipo de autenticación basada en FORMULARIO.Como restricción adicional, no hay base de datos, por lo que no se pueden almacenar datos de la sesión.

Estoy muy abierto a tener un nombre de usuario y una contraseña maestros.Sólo necesito proteger la aplicación de un intruso que no conozca estas credenciales.

Entonces, ¿cómo implementarías esto?

¿Galletas?

Podría presentar el formulario y, si se valida, puedo enviar una cookie que es un hash de la dirección IP y un código secreto.Entonces puedo evitar que las páginas se procesen a menos que se descifre correctamente.Pero no tengo idea de cómo implementar eso en PHP.

¿Fue útil?

Solución

Algunas formas en las que podrías hacer esto.

  1. htaccess - haga que su servidor web se encargue de proteger las páginas en cuestión (aunque no exactamente basado en formularios cgi).
  2. Utilice cookies y algún tipo de algoritmo hash (md5 es lo suficientemente bueno) para almacenar las contraseñas en un archivo plano donde cada línea del archivo es nombre de usuario: contraseñahash.Asegurate que sal sus hashes para mayor seguridad frente a las tablas arcoíris.(Este método es un poco ingenuo...ser muy cuidado con la seguridad si vas por esta ruta)
  3. usa algo como un sqlite base de datos solo para manejar la autenticación.Sqlite es lo suficientemente compacto y simple como para satisfacer sus necesidades incluso si no desea un backend de base de datos grande.

En teoría, también podrías almacenar datos de la sesión en un archivo plano, incluso si no puedes tener una base de datos.

Otros consejos

Si actualmente estás utilizando Authenticate, es posible que ya tengas una htpasswd archivo.Si desea continuar usando ese archivo, pero cambiar a usar la autenticación basada en FORMULARIO en lugar del encabezado Autenticar, puede usar un script PHP para usar el mismo archivo htpasswd y usar sesiones para mantener el estado de autenticación.

Una búsqueda rápida en Google de php htpasswd revela esta página con una función PHP para verificar las credenciales con un htpasswd.Podrías integrarlo (suponiendo que tengas sesiones configuradas para inicio automático) con un código como este:

// At the top of your 'private' page(s):
if($_SESSION['authenticated'] !== TRUE) {
    header('Location: /login.php');
    die();
}

// the target of the POST form from login.php
if(http_authenticate($_POST['username'], $_POST['password']))
    $_SESSION['authenticated'] = TRUE;

¿Realmente necesitas un formulario?No importa lo que hagas, estás limitado a que conozcas el nombre de usuario y la contraseña.Si lo saben, obtienen la galleta mágica que se lo permite.Desea evitar que vean las páginas si no conocen el secreto, y la autorización básica lo hace, es fácil de configurar y no requiere mucho trabajo de su parte.

¿Realmente necesita ver el encabezado de Autorización si el servidor web se encarga del control de acceso por usted?

Además, si proporciona la aplicación a una lista conocida de personas (en lugar de al público), puede proporcionar acceso basado en servidor web en función de otros factores, como la dirección IP entrante, certificados de cliente y muchas otras cosas que son Es una cuestión de configuración más que de programación.Si explicó sus limitaciones de seguridad, podríamos ofrecerle una mejor solución.

Buena suerte, :)

...Acerca de la sal, agregar el nombre de usuario en su hash salt evitará que alguien que conozca su sal y tenga acceso a su archivo de contraseña escriba una tabla de arcoíris y descifre el número de la contraseña de sus usuarios.

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