0

ウェブサイトで Facebook 認証を使用しています。

Nginx 1.2.3 を使用しています。

Facebook は、次のパターンで URL を生成します。

=">https://www.mysite.net/profile.xhtml?state=dfecc191-5eb5-4e08-a514-bc70fdc17611&code=AQBKJ_1VuycE7-DPigKfrAt9BLGQJww-p0RKY_Lta6uDxsaMUgzR98soPiOD6NDZ6kyU-NJUHmpAqEOSCxOKi7UGgh0fJSfC9kyh18FtSbQNJdyNEkkfaNtP9GMC8y25W6fOjyR2fj3OnQQTFDwmm-gckqofvhJsmnPSWgHxaan7uiaz_Wgc5JcdTu2DfzhOjqUQ_QG7X14jWDdq9CUtHuSV# =

ご覧のとおり#_=_、コード パラメータ値の最後に facebook を追加します。

ここで、# を含む任意の種類の URL GET を構築しようとすると、NGINX は # に遭遇したときにリクエストの解析を停止します。これはたとえば.

次のログを提供します。

[16/Aug/2012:11:25:33 +0200] "GET /index.html?value1=jo HTTP/1.1" 200 4976 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.1 (KHTML、Gecko など) Chrome/21.0.1180.79 Safari/537.1"

私の場合、Nginx はリクエストの解析を停止し、コード パラメータ値から「# = 」を削除します。

何か案が ?

ありがとう。

PS: これは Apache と完全に連携します。

4

2 に答える 2

1

したがって、サーバーのハンドルハッシュ(#_ = _)の方法は、通常、サーバーがそれを無視することです。

このハッシュは、Facebookから返されたコードが機能するかどうかには関係ありません。

その成功に影響を与えるのはケーシングです。コードを使用する前に、リクエストパラメータで.ToLower()(または同様のもの)を呼び出していないことを確認してください。

お役に立てれば!

于 2012-09-14T18:02:38.983 に答える
1

私はあなたが間違っていると思います.ブラウザ(混乱する場合はIEを期待してください)はURLのフラグメント部分をサーバーに送信しません.これはHTTP仕様です.

これが Apache で動作すると言うのはほぼ不可能です。

あなたの例は完全に有効な URL ですが、#hn&value2=doe は実際には URL のフラグメント部分であるため、URI 部分はhttp://www.mysite.net/index.html?value1=joです。

于 2012-09-15T02:56:50.617 に答える