web-dev-qa-db-ja.com

データベースまたはユーザー名なしでphpを使用してフォルダー/ページをパスワード保護する最良の方法は何ですか

データベースまたはユーザー名を使用せずにphpを使用してフォルダーをパスワードで保護する最良の方法は何ですか。基本的に、私は組織の連絡先を一覧表示するページを持っています。すべてのユーザーのアカウントがなくても、そのフォルダーをパスワードで保護する必要があります。たまにしか変更されず、グループに配布される1つのパスワードのみ。私はそれが非常に安全ではないことを理解していますが、それでも私がこれを行う方法を知りたいと思っています。最良の方法で。

ユーザーが正しく入力してからしばらくの間パスワードを記憶しておくといいでしょう。


私は、デビッド・ヘギーが提案したこととほぼ同じですが、クッキーなしです。それは地獄のように安全ではないように見えますが、おそらく悪いパスワード保護を持っている方がより良いでしょう。

これは、ユーザーがログインとパスワードを覚えていて、決してsign upプロセスを通過しない内部サイト用です...本当に簡単でない限り、システムをまったく使用しません。

この問題の他の解決策を見たかった。

技術にあまり詳しくないユーザーで構成されるユーザーベースでは、これを行う他の方法は何ですか。

21
Boris Smirnov

次のようなものを使用できます:

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

次に、保護する各ファイルの上部に配置します。

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

それはとてもいい解決策ではありませんが、あなたが望むことをするかもしれません

編集

次のようなlogout.phpページを追加できます。

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

Apacheを使用していると仮定します。

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

Cookieやセッションを避け、.htaccessファイルを使用したくない場合は、PHPを使用してhttp認証を行うこともできます。

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

パスワードをファイルにハードコーディングして必要に応じて変更するか、web_accessibleディレクトリにないファイルから含めることができます。

欠点は、「ログイン」画面をフォーマットする機能がないことです。これは、標準のhttp認証ダイアログボックスになります。

4
Law

これがbestとしてカウントされるかどうか疑問に思いますが、うまくいくでしょう。そして、セキュリティはあなたにとって大きな問題ではないようですので、この方法が地獄と同じくらい安全でないという事実はおそらくあなたを悩ませることもないでしょう。

パスワードを受け取り、ログインの詳細が正しい場合はCookieを設定するlogin.phpページを用意します。次に、各phpファイルはCookieの存在をチェックして、ユーザーが「ログイン」しているかどうかを判断し、それに応じて情報を表示できます。

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

各「保護された」ページは、このCookieをチェックします。

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

きっとあなたは(非常に不安定な)アイデアを手に入れるでしょう...

1
David Heggie