5

手始めに; 私はコーディングにそれほど精通していません。

特定のディレクトリまたはサイトで基本/標準の「認証が必要」ダイアログをトリガー/またはスローする方法と、ユーザーがそこに入力する資格情報を別のデータベースと照合する方法についてのスクリプトにかなり興味があります。 Webサイト。

つまり、「msnであなたをブロックした人を確認する」Webサイトのように、Webサイトから資格情報を取得し、Hotmailデータベースまたはサーバーと照合して、資格情報が正しくないか(再試行)、正しいかどうかを通知します。管理者によって実装される特定のWebサイト。(この状況では、Hotmailの連絡先リスト)

また、クレデンシャルが正しいことを確認するときに、それらのクレデンシャルを特定の.txtファイルまたはフォルダーに保存するスクリプトを作成するにはどうすればよいですか?!

唯一の違いは、この例のような基本認証ダイアログにしたいということですが、これを自分のサイトに実装したいのです。

私は私が理解できることを願っています。

事前にどうもありがとうございました。

4

2 に答える 2

3

401 応答コードをブラウザーに送信する必要があります。これにより、ブラウザーはユーザー名とパスワードの入力を求められます。PHP マニュアルから抜粋した PHP の例を次に示します。

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
} else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>

選択した言語で同じことを実行できるはずですが、使用する言語でユーザー名とパスワードの変数がどこに保存されているかを調べる必要があります。

別の方法として、Web サーバーでこれを構成することもできます。そうすれば、Web サーバーが認証を処理し、通常は「REMOTE_USER」環境変数にある現在のユーザー名を取得するようにアプリケーションをプログラムするだけで済みます。Apache では、次のように特定のフォルダーへのアクセスを制限できます。

<Directory /usr/local/apache/htdocs/secret>
    AuthType Basic
    AuthName "Restricted Files"
    # (Following line optional)
    AuthBasicProvider file
    AuthUserFile /usr/local/apache/passwd/passwords
    Require user rbowen
</Directory>

詳細については、認証とアクセス制御に関する Apache のドキュメントを参照してください。別の Web サーバーを使用している場合でも、これは Web サーバーの一般的な機能ですのでご安心ください。使用しているどの Web サーバーでも同等の機能を見つけることができると確信しています。

于 2011-01-31T01:28:41.740 に答える
1

Java インポートは除外されました...

ユーザー名とパスワードのダイアログを表示するには...

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"My Realm\"");
httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED, "");

リクエストをデコードするには...

private boolean authenticateRequestOk(HttpServletRequest request)
{
    String authorizationHeader = request.getHeader("Authorization");

    if (authorizationHeader != null)
    {
        byte[] decodedUsernamePassword;
        try
        {
            decodedUsernamePassword = Base64.decode(authorizationHeader.substring("Basic ".length()));
        }
        catch (IOException e)
        {
            log.error("Error decoding authorization header \"" + authorizationHeader + "\"", e);
            return false;
        }

        String usernameAndPassword = new String(decodedUsernamePassword);

        String username = StringUtils.substringBefore(usernameAndPassword, ":");
        String password = StringUtils.substringAfter(usernameAndPassword, ":");

        if (USERNAME.equalsIgnoreCase(username) && PASSWORD.equalsIgnoreCase(password))
        {
            return true;
        }
    }

    return false;
}
于 2011-02-01T05:15:51.797 に答える