3

私の問題は次のとおりです。顧客のカタログをホストするオンライン サービスがあります。
このサービスには認証が必要ですが、ユーザー名/パスワードは 1 つしかありません。
代わりに、私の顧客は、独自のユーザー/パスワードとアクセス統計を使用して、すべてのユーザーを個別に管理したいと考えています。そこで私がしたことは、独自のアカウント管理を構築することでした。これまでのところ、うまくいっています。
ここで行う必要があるのは、ユーザーが自分の資格情報を入力する必要があるログイン フォームを追加することです。送信されると、スクリプトは認証を続行し、すべて問題なければアクセス カウントを増やし、リモート システムのログイン データを POST 経由で送信し、ブラウザを通常のフォームとまったく同じ方法で応答ページにリダイレクトします。
私はcurlこの方法を使用してみました:

if (authenticate($_POST['usr'],$_POST['pwd'])) {
    $url = "http://www.foo.com/login.php";
    $postdata = http_build_query(array('username'=>"foo",'password'=>"bar"));
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_exec($curl);
    curl_close($curl);
}

しかし、サイトにリダイレクトされるのではなく、宛先ページのデータを自分のページにロードしてしまいます。
私は何をすべきか?
PS 可能であれば、JS を介して送信された非表示のフォームに頼ることは避けたいと思います。
ありがとう!

4

2 に答える 2

2

CURLOPT_RETURNTRANSFERを使用します。

curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);

マニュアルから:

転送を直接出力するのではなく、curl_exec()の戻り値の文字列として転送を返す場合はTRUE。

于 2012-12-06T12:21:33.303 に答える
2

やろうとしていることの全体像が見えていないと思います。認証は URL ベースではなく、Cookie またはセッション ベースであるため、基本的にリダイレクトは役に立ちません。つまり、自分自身を認証することはできず (これは、その Web サイトで非表示の資格情報を使用してフォーム送信をエミュレートするときに発生します)、訪問者にその認証を自分で取得させることができます。ここではリダイレクトは役に立ちません。彼をリダイレクトしても、彼は認証されていません。サーバーは、ユーザー自身ではなく、フォームを送信したためです。

私が得られないのは、その隠された資格情報でユーザーを認証し、統計への完全なアクセスを彼に与えることに問題がないということです。なぜ彼にアクセスを与えないのですか? あなたは彼にすべてへのフルアクセスを提供していますが、彼にログインとパスワードを提供していませんか?

反対に、POST リダイレクトはできないため、偽造された POST データを使用してフォーム送信時に彼をリダイレクトすることはできません。リダイレクト時にすべての POST データが失われます。

醜い回避策として、次のことをお勧めします。現在行っているように自分自身を認証し、プロキシと同様に、ユーザーが Web サイトから統計を閲覧できるようにします。次に、ページ上のすべてのリンクを のようなものに変更できます。ユーザーが見たい統計サイトのページはyoursite.com/viewstats/?page=URLどこですか。URLそのページを取得して、ユーザーに表示します。デザインを維持するには、css/js ファイルへの相対パスを変更する必要があります。また、この"/viewstats/?page=" . urlencode($old_url)ような Web サイト内のすべてのリンクを変更して、プロキシのようなゲートを指すようにする必要もあります。

于 2012-12-06T14:13:23.940 に答える