23

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

ユーザーがパスワードを正しく入力したら、パスワードをしばらく覚えておくと便利です。


私は、Cookieがないことを除いて、DavidHeggieが提案したこととほぼ同じことをしています。それは地獄のように安全ではないように見えますが、パスワード保護が悪い方が良いでしょう。

これは、ログインとパスワードを覚えておくのに時間がかかり、サインアップ プロセスを経ることがない内部サイト用です...本当に簡単でない限り、システムをまったく使用しません。

この問題に対する他の解決策を見たかったのです。

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

4

5 に答える 5

72

編集: SHA1 は安全とは見なされなくなりました。保存されたパスワード ハッシュもソルトする必要があります。現在、この問題に対するより優れた解決策があります。


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

//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   
于 2008-11-13T14:13:16.170 に答える
8

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

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

于 2008-11-13T13:50:07.090 に答える
4

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

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

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

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

于 2008-11-14T16:36:19.827 に答える
1

これが最善の方法と見なされるかどうかは疑問ですが、うまくいくでしょう。また、セキュリティはあなたにとって大きな問題ではないように思われるため、この方法が地獄のように安全でないという事実も、おそらく気にしないでしょう.

ログインの詳細が正しい場合にパスワードを受け取り、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;
}

私はあなたが(非常に安全でない)アイデアを得ると確信しています...

于 2008-11-13T14:10:34.053 に答える
-2

そもそも安全ではないことがわかっているので、Web サーバーのどこかにパスワードをテキスト ファイルに保存することができます。誰かがページにアクセスすると、パスワードを要求するフォームを表示できます。パスワードがテキスト ファイルの内容と一致する場合は、ページをリロードして情報を表示します。テキスト ファイルを使用すると、パスワードを変更したいときにアクセスしているページを変更することなく、パスワードを変更できます。SSL を使用していない限り、どこにでも平文を送信することになります。コードが必要な場合はお知らせください。

于 2008-11-13T14:03:28.063 に答える