2009-06-05 19 views
2

実際には、私はカールが犯人であるかどうかわからないので、面倒です。POSTの代わりにGETを送信すると、

$creds = array(
    'pw' => "xxxx", 
    'login' => "user" 
    ); 

$login_url = "https://www.example.net/login-form"; //action value in real form. 
$loginpage = curl_init(); 

curl_setopt($loginpage, CURLOPT_HEADER, 1); 
curl_setopt($loginpage, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($loginpage, CURLOPT_URL, $login_url); 
curl_setopt($loginpage, CURLOPT_POST, 1); 
curl_setopt($loginpage, CURLOPT_POSTFIELDS, $creds); 

$response = curl_exec($loginpage); 
echo $response; 

は私が(通常、成功したリクエストのヘッダと一致する)のヘッダを取得し、ログインページに続いて(私はカールリダイレクトには、この原因を捕獲推測している)がありますので、ここではPHPの「接触不良タイプ」の影響を受けます。

私は問題は、要求がリモートサーバーではなく要求側サーバーに設定されているが、その後は(Firebugで)要求がPOSTではなくGETとして送信されることに気づいたと思いました。

私はログインサイトのフォームをコピーして、フォーム要素だけを値でストリップし、アクションの完全なURLを入れればうまくいきます。だから、私はこれがセキュリティの問題ではないと思うだろうログイン要求が同じサーバーなど(私は空の隠された値とJSのすべての他のクッキーの一部を取り除く)を取り除く。

もう一度、私はかなり素早く混乱します。

なぜそれがGETとして表示されているのか、それともそれが問題ではないのかについてのアイデアはありますか?

答えて

1

PHP-cURL関連の問題のクラス全体のトラブルシューティングを行うには、CURLOPT_VERBOSEをオンにして、CURLOPT_STDERRにファイルハンドルを渡すだけです。

tail -fあなたのファイルは、Firebugに表示されているものとヘッダーと応答を比較してください。

+0

本当に良いアドバイス。 – RageZ

1

要求はサーバーから行われ、Firebugには表示されません。 (おそらくあなたのブラウザーによる別のリクエストと混同しているかもしれません)。実際に何が起こっているか調べるには、wiresharkを使ってください。あなたは設定していませんCURLOPT_FOLLOWLOCATION;リダイレクトは守らないでください。

要約:以下を推測してください。 pcapダンプにリンクすると、間違っていることを正確に伝えることができます。またはPHPスクリプトの正確な出力を投稿することができます。

+0

ヘッドアップに感謝します。他のサーバーとほとんど同じcurl_execを実行したとき、POST(私が設定したフォームの値で)を見たので、(Netタブの)Firebugは正確であると思った。確かに、私はローカルマシンでwiresharkを使用しますか?私は要求がサーバー側であるので、私はないと推測しています。どのようにサーバー用に構成しますか? – Anthony

+0

@Anthony wiresharkは、PHPが動作しているマシン上で実行されなければなりません。 wiresharkがそこにインストールされていない場合は、tcpdumpを探します。私はカール関連のものに非常に興味があります。このボックスに収まらない質問がある場合は、IMまたは電子メールで私に連絡することをためらってください。 – phihag

1

示されているコードは、ターゲットサーバーが予期していないものと思われるマルチパートフォームポスト(POSTFIELDSオプションにハッシュ配列を渡すため)です。

0

最後にprint_r(curl_getinfo($loginpage))を送信してみてください。送信されたヘッダーデータを確認してください。

また、自分のサイトからのログインを偽造しようとしている場合は、あなたが投稿したときにあなたがウェブサイト上にあったと思うように、 。

関連する問題