2011-01-17 9 views
5

を削除します(私はそのリクエストをHTTPプロキシで読む):Serverは、これは私がサーバーに送信してい要求です...私は、ヘッダのカスタムフィールドでHTTPリクエストを受信しようとしてきたが、私のサーバーは、それらを削除するようにそれはそう</p> <p>をカスタムHTTPヘッダフィールド

POST /oauth.php/request_token HTTP/1.1 
Host: domain.com 
User-Agent: DearStranger/1.0 CFNetwork/485.12.7 Darwin/10.6.0 
Authorization: OAuth realm="", oauth_consumer_key="ebb942f0d260b06cb533c6133c28408004d343197", oauth_signature_method="HMAC-SHA1", oauth_signature="qPBFAa8XRRbor2%2F%2FQXv6kU3%2F7jU%3D", oauth_timestamp="1295278460", oauth_nonce="E7D6AC76-74CE-4951-8182-7EBF9B382E7E", oauth_version="1.0" 
Accept: */* 
Accept-Language: en-us 
Accept-Encoding: gzip, deflate 
Pragma: no-cache 
Content-Length: 0 
Connection: keep-alive 
Proxy-Connection: keep-alive 

私は自分のpage.phpに到着したときにリクエストのヘッダーを印刷しました。私は(それがローカルバージョンに取り組んでいる)ことを見てする必要があるとき、私は、サーバー上のPHP 5.2.17を使用しています

uri http://localhost:8888/oauth.php/request_token 
parameters 
headers Array 
.... Accept : */* 
.... Accept-Encoding : gzip, deflate 
.... Accept-Language : en-us 
.... Authorization : OAuth realm="", oauth_consumer_key="582d95bd45d455fa2e5819f88fc0c5a104d2c7ff3", oauth_signature_method="HMAC-SHA1", oauth_signature="agPSFdtlGxXv2sbrz3pRjHlROOE%3D", oauth_timestamp="1295272680", oauth_nonce="667A133C-5071-48AB-9F13-8146425E46B7", oauth_version="1.0" 
.... Connection : keep-alive 
.... Content-Length : 0 
.... Host : localhost:8888 
.... User-Agent : DearStranger/1.0 CFNetwork/485.12.7 Darwin/10.6.0 
method POST 

uri http://domain.com/oauth.php/request_token 
parameters 
headers Array 
.... Accept : */* 
.... Accept-Encoding : gzip, deflate 
.... Accept-Language : en-us 
.... Connection : keep-alive 
.... Host : domain.com 
.... User-Agent : DearStranger/1.0 CFNetwork/485.12.7 Darwin/10.6.0 
method POST 

:私はそれを参照してください。

この問題を解決するお手伝いがありますか?

ありがとうございます!

+1

値の代わりに実際のヘッダー(または$ _SERVER [])を表示できますか? – mario

+0

ファイアウォールがヘッダーを削除していないと確信していますか?ファイアウォールの多くは、受け入れ可能なヘッダーをホワイトリストにし、他のすべてのファイアウォールを削除します。 – ircmaxell

+0

どこに(squid)プロキシがありますか? – powtac

答えて

5

Apacheは、CGIで使用する場合、セキュリティ上のリスクがあるため、認証ヘッダーを削除します。 PHPをCGIで使っていますか?

PHPは一部の状況で認証を剥奪すると思います。繰り返しますが、スクリプトに公開すると、あるユーザーのコードで同じサーバー上の他のユーザーを盗聴することができます(たとえば、AliceとBobの両方にアカウントがある場合)。

+0

はい私はCGIでphpを使用していますが、Apacheが認証ヘッダーを取り除いたことを知らなかった...奇妙です! – MartinMoizard

+1

あなたが話すこの認証ヘッダは何ですか? –

1

カットされているヘッダーの実際の名前を含めてください。この質問は現在の形では役に立たないので、推測する必要があります。

Firebug/HTTPFoxでブラウザが実際にこれらのヘッダーを送信していることを確認しましたか?ヘッダーをクリーンアップするようにサーバーを具体的に構成していない限り、カスタムヘッダーをそのままパススルーします。

OAuthデータの送信先となるAuthorizationヘッダーは、サーバー側の401認可が必要な要求に応じてクライアントからのみ送信されます。サーバー側の「パスワードを入力する必要があります」設定を追加していない場合、クライアントは認証情報を送信しません。

+0

メッセージを編集しました。ヘッダーの名前が表示されるようになりました。だから、カットされた重要な人物は「認可」と呼ばれます。私はまだFirebug/HTTPFoxで何もチェックしていません。私のリクエストはiPhoneアプリから送られてきたからですが、今のところiPhoneのシミュレータから送られてきました。私は、サーバーが401 Authorization要求された応答を送信した後、このhttp要求を作成しています。 – MartinMoizard

+0

さて、エミュレータから受信したヘッダを記録できるHTTPプロキシをそこに貼り付けてください。 PHP自体はヘッダーを取り除かず、通常はApacheもそうではないので、あなたのアプリはそれらを送信しない可能性が非常に高いです。 –

+0

そして、ローカルサーバ上では動作していて、他の場所で自分のコードをホストしているときは何ができないのでしょうか?私はヘッダーを記録しようとするつもりです、私はあなたに知らせるでしょう...!ありがとうございました – MartinMoizard

6

実際、かなり簡単に修正があります。断層はfastcgiである。 .htaccessファイルに書き換えルールを指定するだけで、ヘッダを保存することができます。

<IfModule mod_rewrite.c> 

... 

# Pass Authorization headers to an environment variable 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

</IfModule> 

クレジットはここに行く:https://drupal.org/node/1365168

彼らはまた、あなたが仮想ホストを使用している場合、これらのヘッダは、通過させるためにも、簡単な解決策について話しています。

関連する問題

 関連する問題