2008-11-13 6 views
22

¿Cuál es la mejor manera de proteger con contraseña la carpeta usando php sin una base de datos o nombre de usuario pero usando? Básicamente tengo una página que enumerará contactos para la organización y necesita proteger con contraseña esa carpeta sin tener una cuenta para cada usuario. Solo una contraseña que recibe cambios cada cierto tiempo y se distribuye al grupo. Entiendo que no es muy seguro, pero que me gustaría saber cómo hacerlo. De la mejor manera.¿Cuál es la mejor forma de proteger con contraseña la carpeta/página utilizando php sin un db o nombre de usuario

Sería bueno si la contraseña se recuerda por un tiempo una vez que el usuario la ingresó correctamente.


Estoy haciendo aproximadamente lo que David Heggie sugirió, excepto sin cookies. Parece inseguro como el infierno, pero probablemente es mejor tener una mala contraseña de protección que ninguna.

Esto es para sitio interno donde las personas tendrían infierno de un tiempo de recordar su usuario y contraseña y nunca pasar por de registro proceso ... a menos que sea muy fácil que no utilizan el sistema en absoluto.

Quería ver otras soluciones a este problema.

Con una base de usuarios formada por personas poco conocedoras de la tecnología, existen otras formas de hacerlo.

Respuesta

63

usted podría utilizar algo como esto:

//access.php 

<?php 
//put sha1() encrypted password here - example is 'hello' 
$password = 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d'; 

session_start(); 
if (!isset($_SESSION['loggedIn'])) { 
    $_SESSION['loggedIn'] = false; 
} 

if (isset($_POST['password'])) { 
    if (sha1($_POST['password']) == $password) { 
     $_SESSION['loggedIn'] = true; 
    } else { 
     die ('Incorrect password'); 
    } 
} 

if (!$_SESSION['loggedIn']): ?> 

<html><head><title>Login</title></head> 
    <body> 
    <p>You need to login</p> 
    <form method="post"> 
     Password: <input type="password" name="password"> <br /> 
     <input type="submit" name="submit" value="Login"> 
    </form> 
    </body> 
</html> 

<?php 
exit(); 
endif; 
?> 

Luego, en cada archivo que desea proteger, poner en la parte superior:

<?php 
require('access.php'); 
?> 
secret text 

No es una muy buena solución, pero podría hacer lo que quiera

Editar

Se podría añadir una página logout.php como:

<?php 
    session_start(); 
    $_SESSION['loggedIn'] = false; 
?> 
You have logged out 
+5

+1 Para usar un algoritmo hash para precalcular y almacenar. Sin embargo, SHA2 o al menos SHA1 sería más seguro. – willasaywhat

+0

No sé cuánta seguridad le importa a OP. –

+1

¡GRACIAS! ¡Exactamente lo que necesitaba! También devolvió algunos errores que no afectaron nada, así que apagué los errores de PHP al poner ' 'en la parte superior de la página respectiva (antes de' '¡Gracias de nuevo! – Accelerator

-2

Bueno ya que sabe que es inseguro para empezar, se podría almacenar una contraseña en un archivo de texto en algún lugar de su servidor web. Cuando alguien accede a la página puede mostrar un formulario que solicita una contraseña. Si la contraseña coincide con lo que está en el archivo de texto, entonces vuelve a cargar la página y muestra la información. Usar el archivo de texto le permitirá cambiar la contraseña sin tener que modificar la página a la que está accediendo cuando quiera cambiarla. Seguirás enviando texto sin formato a todas partes a menos que estés usando SSL. Avíseme si necesita algún código.

+0

Si el archivo de texto no está en un directorio público, esto es tan seguro como http basic auth y la mayoría de las diversas implementaciones de php (sin la capa SSL), así que no obtengo el abajo votos ...? – lol

1

Dudo si esto fuera el mejor de hacerlo, pero funcionaría. Y dado que la seguridad no parece ser un gran problema para usted, el hecho de que este camino sea tan inseguro como el infierno probablemente tampoco le molestará.

Tiene una página login.php que toma una contraseña y luego establece una cookie si los datos de inicio de sesión son correctos. Cada archivo php puede verificar la existencia de la cookie para determinar si el usuario está "conectado" o no y mostrar la información correspondiente.

login.php 
... 
if(isset($_POST['password']) && $_POST['password'] == 'my_top_secret_word') { 
    setcookie('loggedin', 'true', time() + 1200, '/url/'); 
} else { 
    setcookie('loggedin', 'false', time() - 1200, '/url/'); 
    // display a login form here 
} 
etc 

cada página "protegido" entonces comprobar si esta cookie:

if(isset($_COOKIE['loggedin'])) { 
    if($_COOKIE['loggedin'] == 'true') { 
     $showHidden = true; 
    } else { 
     $showHidden = false; 
    } 
} else { 
    $showHidden = false; 
} 

Estoy seguro de que la idea (muy inseguro) ...

4

Si se quiere evitar galletas, sesiones y no quieren jugar con los archivos .htaccess, también se puede hacer http Soley autenticación con PHP:

http://www.php.net/manual/en/features.http-auth.php

que puede codificar la contraseña en el archivo y cambiar según sea necesario, o incluirlo desde un archivo en el directorio no web_accessible.

El inconveniente es que no tiene la capacidad para dar formato a la pantalla de "entrada" - será una caja de diálogo estándar de autenticación HTTP

Cuestiones relacionadas