web-dev-qa-db-ja.com

フォームを介した基本認証情報の送信

私は現在、基本認証ダイアログボックスのログインシステムを使用しているサイトで作業しています。これは、ここにアクセスすると表示されるダイアログのタイプです: http://www.dur.ac.uk/vm.boatclub /password/index.php 私はこのシステムをセットアップしておらず、簡単/迅速に回避する立場にありませんが、機能します。ただし、問題は、ダイアログボックスが、使用する必要のあるログイン情報(つまり、ユーザー名とパスワードの組み合わせ)を通知するのにあまり役立たないことです。そのため、フォームに置き換えたいと思います。これは不可能だと思っていたのですが、調べてみたかったのです。

このダイアログボックスを使用するのと同じ方法でデータを受け入れるように、データをサーバーに送信するHTMLフォームを設定することは可能ですか?あるいは、通常の形式のデータを取得して処理し、ログインするようにサーバーに渡すPHPスクリプトを設定することは可能ですか?

編集:これは基本認証であると言われた後、私は周りを回って、ユーザーを永続的にログインさせ続ける方法を見つけることができました。しかし、これはInternetExplorerでは機能しません。解決策は、単にユーザーを次の場所にリダイレクトすることでした。 http:// username:[email protected]/vm.boatclub/password/index.php しかし、Internet Explorerは、フィッシングのためにユーザーを削除しました。約3年前に使用します。この方法でブラウザにサイトにアクセスさせるためにjavascriptを使用する方法はありますか?それとも、単にUIを変更する必要がありますか?

15
VolatileStorm

かなりの調査の結果、ChromeとIEの両方で機能する方法を見つけました。テストしたのはそれだけですが、コードのロジックでは、壊れるべきだとは示唆されていません。どこでも。それはこの記事に基づいています:

http://www.peej.co.uk/articles/http-auth-with-html-forms.html

これはかなり詳細ですが、その核心はこれです-フォーム送信で、基本認証済みフォルダーにAJAXリクエストを送信します。AJAXリクエストは受け入れることができます基本認証のユーザー名とパスワードの情報、およびブラウザがそのレルムで認証されると認証されると、つまりログインしたままになります。前の記事では純粋なJavaScriptでそれを行っているので、ここにリンクを説明する以外の何かを追加します(うまくいけばかなり透過的です)jQueryを使用した実装:

  $(document).ready(function()
  {
    $('#loginForm').submit(function()
    {
      var username = $('#usernameInput').val();
      var password = $('#passwordInput').val();

      $.ajax(
        {
          'password' : password,
          'username' : username,
          'url'      : 'http://www.website.com/basic-auth-file.php',
          'type'     : 'GET',
          'success'  : function(){ window.location = 'http://www.website.com/basic-auth-file.php'; },
          'error'    : function(){ alert('Bad Login Details');},
        }
      );

      return false;
    });
  });

これは私が望んでいたことを達成し、比較的簡単に理解できますが、これを外に出したいと思っていて、外に出て調査を行うための基本認証について知らなかった人には誰でもお願いします!

11
VolatileStorm

フォームに置き換えることができます。 http://www.dur.ac.uk/vm.boatclub/password/index.php 使用 基本アクセス認証

基本アクセス認証

あなたにできることは、curlを介して基本認証を実行することです

<?php 
// HTTP authentication 
$url = "http://www.dur.ac.uk/vm.boatclub/password/index.php"; 
$ch = curl_init();     
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");  
$result = curl_exec($ch);  
curl_close($ch);  
//echo $result; 
?> 

オプション1

エコーするだけですべてをプロキシする$result

オプション2

ヘッダーの読み取り from $resultそしてステータスコード!= 200の場合、間違ったログイン情報が入力されています。ユーザーはフォームをもう一度入力する必要があります。ステータスコード== 200の正しい資格情報が入力されている場合は、ヘッダーを送信してhttp基本認証を実行する必要があります。

header("Authorization: Basic " . base64_encode($username . ":" . $password);

ヘッダーを送信する前にデータ($ result)をエコーし​​ないでください。エコーするとエラーが発生します

いくつかのクイックリンク:

8
Alfred