web-dev-qa-db-fra.com

Quelle est la meilleure façon de protéger le dossier / la page par mot de passe en utilisant PHP sans base de données ni nom d'utilisateur

Quelle est la meilleure façon de protéger le dossier par mot de passe en utilisant php sans base de données ou nom d'utilisateur mais en utilisant. Fondamentalement, j'ai une page qui répertorie les contacts pour l'organisation et j'ai besoin de protéger par mot de passe ce dossier sans avoir de compte pour chaque utilisateur. Un seul mot de passe qui est modifié de temps en temps et distribué au groupe. Je comprends que ce n'est pas très sécurisé mais j'aimerais quand même savoir comment faire cela. De la meilleure façon.

Ce serait bien si le mot de passe est mémorisé pendant un certain temps 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 ne semble pas sûr, mais il vaut probablement mieux avoir une mauvaise protection par mot de passe que rien du tout.

C'est pour un site interne où les gens auraient beaucoup de mal à se souvenir de leur identifiant et de leur mot de passe et ne passeraient jamais par inscription processus ... à moins que ce ne soit vraiment facile, ils n'utiliseraient pas du tout 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 technologie, quelles sont les autres façons de le faire.

21
Boris Smirnov

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

Puis sur chaque fichier que vous souhaitez protéger, mettez en haut:

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

Ce n'est pas une solution très agréable, mais elle 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   
65
Tom Haigh

En supposant que vous êtes sur Apache:

http://httpd.Apache.org/docs/1.3/howto/htaccess.html#auth

8

Si vous voulez éviter les cookies, les sessions et que vous ne voulez pas jouer avec les fichiers .htaccess, vous pouvez également faire l'authentification http uniquement 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 si nécessaire, ou l'inclure à partir d'un fichier qui ne se trouve pas dans votre répertoire web_accessible.

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

4
Law

Je doute que cela compte comme le meilleur de le faire, mais cela fonctionnerait. Et comme 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 "connecté" ou non, et afficher les 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" vérifierait alors 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ûre) ...

1
David Heggie