6

CGI プログラムとして実行される PHP スクリプトがあり、HTTPAuthenticateヘッダーが食べられて吐き出されます。したがって、ある種の FORM ベースの認証を実装したいと思います。追加の制約として、データベースがないため、セッション データを保存できません。

私は、マスターのユーザー名とパスワードを持つことに非常にオープンです。これらの資格情報を知らない侵入者からアプリケーションを保護する必要があるだけです。

では、これをどのように実装しますか?

クッキー?

フォームを提示し、それが有効であれば、IP アドレスのハッシュである Cookie を送り返すことができます。これはシークレット コードです。次に、物事が正しく復号化されない限り、ページがレンダリングされないようにすることができます。しかし、それをPHPで実装する方法がわかりません。

4

4 に答える 4

5

これを行うにはいくつかの方法があります。

  1. htaccess -- 問題のページをセキュリティで保護するための Web サーバー ハンドルを用意します (正確には CGI フォーム ベースではありません)。
  2. Cookie とある種のハッシュ アルゴリズム (md5 で十分) を使用して、ファイルの各行がユーザー名:パスワード ハッシュであるフラット ファイルにパスワードを保存します。レインボーテーブルに対するセキュリティを強化するために、必ずハッシュをソルトしてください。(この方法は少しナイーブです... この方法を使用する場合は、セキュリティ十分注意してください)
  3. 認証を処理するためだけにsqliteデータベースのようなものを使用します。Sqlite はコンパクトでシンプルなので、大規模な db バックエンドが必要ない場合でもニーズを満たすことができます。

理論的には、データベースがなくても、セッション データをフラット ファイルに保存することもできます。

于 2008-08-20T04:37:35.243 に答える
1

現在認証を使用している場合は、既にhtpasswdファイルがある可能性があります。そのファイルを引き続き使用するが、Authenticate ヘッダーではなく FORM ベースの認証を使用するように切り替える場合は、PHP スクリプトを使用して同じ htpasswd ファイルを使用し、セッションを使用して認証ステータスを維持できます。

php htpasswd を Google で簡単に検索すると、htpasswd に対して資格情報をチェックする PHP 関数を含むこのページが表示されます。次のようなコードと統合できます(セッションが自動開始に設定されていると仮定):

// At the top of your 'private' page(s):
if($_SESSION['authenticated'] !== TRUE) {
    header('Location: /login.php');
    die();
}

// the target of the POST form from login.php
if(http_authenticate($_POST['username'], $_POST['password']))
    $_SESSION['authenticated'] = TRUE;
于 2008-08-28T08:54:09.037 に答える
1

フォームは本当に必要ですか?何をするにしても、知られているユーザー名とパスワードによって制限されます。彼らがそれを知っている場合、彼らはあなたの魔法のクッキーを手に入れます. 秘密を知らないユーザーにページが表示されないようにしたい場合、ベーシック認証はそれを行い、セットアップが簡単で、多くの作業を必要としません。

Web サーバーがアクセス制御を処理する場合、本当に Authorization ヘッダーを確認する必要がありますか?

また、(公開ではなく) 既知の人々のリストにアプリケーションを提供する場合は、着信 IP アドレス、クライアント証明書、その他多くの要素など、他の要素に対する Web サーバーベースのアクセスを提供できます。プログラミングではなく設定の問題。セキュリティ上の制約について説明していただければ、より良い解決策を提供できる可能性があります。

幸運を、 :)

于 2008-09-20T21:44:16.957 に答える
-1

...ソルトについては、ハッシュソルトにユーザー名を追加すると、ソルトを知っていてパスワードファイルにアクセスしてレインボーテーブルを作成し、ユーザーのパスワードの番号をクラックする人を防ぐことができます。

于 2008-08-20T04:44:37.987 に答える