2008-11-13 6 views
22

Quelle est la meilleure façon de protéger par mot de passe le dossier en utilisant php sans base de données ou nom d'utilisateur mais en utilisant. Fondamentalement, j'ai une page qui liste les contacts pour l'organisation et doit protéger par mot de passe ce dossier sans avoir de compte pour chaque utilisateur. Juste un mot de passe qui reçoit des changements de temps en temps et distribué au groupe. Je comprends que ce n'est pas très sécurisé mais je voudrais savoir comment faire. De la meilleure façon.Quelle est la meilleure façon de protéger mot de passe dossier/page en utilisant php sans un db ou un nom d'utilisateur

Ce serait bien si le mot de passe est mémorisé pendant un moment une fois que l'utilisateur l'a entré correctement. Je fais à peu près ce que David Heggie a suggéré, sauf sans cookies. Cela semble peu sûr, mais il est probablement préférable d'avoir une mauvaise protection de mot de passe alors pas du tout.

Ceci est pour le site interne où les gens se souviendraient de leur login et mot de passe et ne passeraient jamais par inscrivez processus ... à moins que ce soit vraiment facile, ils n'utiliseraient pas le système.

Je voulais voir d'autres solutions à ce problème. Avec une base d'utilisateurs composée de personnes peu expérimentées en matière de technologie, quelles sont les autres façons de le faire?

Répondre

63

Vous pouvez utiliser quelque chose comme ceci:

//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; 
?> 

ensuite sur chaque fichier que vous souhaitez protéger, mettre en tête:

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

Il n'est pas une solution très agréable, mais il pourrait faire ce que vous voulez

Modifier

Vous pouvez ajouter une page logout.php comme:

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

+1 Pour utiliser un algorithme de hachage pour précalibrer et stocker. Bien, SHA2 ou au moins SHA1 serait plus sûr. – willasaywhat

+0

Je ne sais pas à quel point l'OP se soucie de la sécurité. –

+1

MERCI! Exactement ce dont j'avais besoin! Aussi, il a retourné quelques erreurs qui n'affectaient rien alors je viens de désactiver les erreurs PHP en mettant ' 'en haut de la page respective (avant' '. Merci encore! – Accelerator

-2

Eh bien, puisque vous savez il est peu sûr pour commencer, vous pouvez stocker un mot de passe dans un fichier texte quelque part sur votre serveur web. Lorsque quelqu'un accède à la page, vous pouvez afficher un formulaire qui demande un mot de passe. Si le mot de passe correspond à ce qui se trouve dans le fichier texte, vous rechargez la page et affichez les informations. L'utilisation du fichier texte vous permettra de changer le mot de passe sans avoir à modifier la page à laquelle vous accédez lorsque vous souhaitez le modifier. Vous allez toujours envoyer du texte en clair partout sauf si vous utilisez SSL. Faites-moi savoir si vous avez besoin de code.

+0

Si le fichier texte n'est pas dans un répertoire public, il est aussi sécurisé que http basicaut et la plupart des différentes implémentations php (sans la couche SSL), donc je ne comprends pas descendre les votes ...? – lol

1

Je doute si cela compterait comme meilleur de faire cela, mais cela fonctionnerait. Et puisque la sécurité ne semble pas être un gros problème pour vous, le fait que cette voie soit aussi peu sûre que l'enfer ne vous dérangera probablement pas non plus. Avoir une page login.php qui prend un mot de passe, puis définit un cookie si les informations de connexion sont correctes. Chaque fichier php peut alors vérifier l'existence du cookie pour déterminer si l'utilisateur est ou non "connecté" et afficher des informations en conséquence.

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 

chaque page "protégée" serait alors vérifier ce cookie:

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

Je suis sûr que vous avez l'idée (très peu sûr) ...

4

Si vous voulez éviter les cookies, sessions et ne veulent pas jouer avec les fichiers .htaccess, vous pouvez également faire http Soley d'authentification avec PHP:

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

Vous pouvez coder en dur le mot de passe dans le fichier et le modifier au besoin, ou l'inclure dans un fichier pas dans votre répertoire web_accessible.

L'inconvénient est que vous n'avez pas la possibilité de formater l'écran « connexion » - ce sera une boîte de dialogue d'authentification standard http

Questions connexes