2012-11-19 4 views
8

私はこの質問が12回以上尋ねられたことを認識しており、それぞれの回答は私が正しくやっていると示していますが、 。

AJAXは、「アクセス制御限り、すべての文書によると

header('Access-Control-Max-Age: 1728000'); 
header('Access-Control-Allow-Origin: http://someotherdomain.com'); 
header('Access-Control-Allow-Methods: POST'); 
header('Access-Control-Allow-Headers: Content-MD5, X-Alt-Referer'); 
header('Access-Control-Allow-Credentials: true'); 
header("Content-Type: application/json; charset=utf-8"); 

...

$.ajax({ 
url: 'someotherdomain.com', 
type: 'post', 
data: {key: 'value'}, 
dataType: 'json', 
async: false, 
crossDomain: true, 
beforeSend: function(xhr){ 
    xhr.withCredentials = true; 
}, 
success: function(x, status, xhr){ 

}, 
error: function(xhr, status, error){ 

} 
}); 

PHPはそうのようなCORSリクエストを提供... CORSがそうのような要求アップ機能します-Allow-Credentials 'サーバー側ヘッダー、および' withCredentials = true 'クライアント側ヘッダーが設定されている場合、ドメイン間のセッションCookie処理は透過的でなければなりません。何か不足していますか?

+0

Answer :) - あなたはブラウザの名前とjQueryのバージョンが不足しています... http://stackoverflow.com/questions/2054316/jquery-sending-credentials-with-cross-domain-posts –

+0

もチェックしてくださいjQuery v1.8.3&Mozilla FirefoxとGoogle Chrome 上記のコードで確認できるように、実際にそのフラグを設定しています。 –

答えて

4
async: false 

は、リクエストごとにセッションCookieがサーバーに返されないようにしていました。以下はそれを修正しました。

async: true 

これはクロスオリジン・リクエストを共有する電話をかけるときに、セッションクッキーは、ブラウザによって設定された取得するためにできるようにしていますが、私は今、次のシナリオに関する問題が発生しています:

サーバAは、クライアントに応答を送信CORSを使用して クライアントは、サーバBの要求によりPHPのセッション管理におけるミューテックスロックに

XMLHttpRequest -> PHP -> Session handler -> MySQL -> Stored Procedure 

非同期性になり、明らかに、要件がs手動の周りの仕事を強制することXCookieなどの別のヘッダーオプションを使用してCookieを作成し、サーバーのセッションとクライアントの要求を同期させた状態に保ちます。

この特定の回避策は、セッションハイジャックとセッションリプレイ攻撃のための簡単な移動経路を開くと考えられるので、うまく座っていません。

SSL/TLSラップされた接続を使用すると、上記のシナリオを防ぐのに役立つかもしれませんが、クライアントのセキュリティ対策を独自に提供するという点では、これで十分ではないと思います。

誰もがこれについて考えていますか?

1

上記の例では、Access Control-Allow-Originヘッダーを「http://someotherdomain.com」に設定しています。これはJQueryから要求しているURLと同じです。 Access-Control-Allow-Originヘッダーは、要求が送信されたドメインの値である必要があります。クイックテストとして、このヘッダーの値を '*'(引用符なし)に設定し、それが有効かどうかを確認してください( '*'はすべてのドメインが許可されていることを意味します)。

+0

私はこれを最初に考えましたが、ワイルドカードを有効にしても(@https://クライアントとサーバーの両方で 'withCredentials'オプションが 'true'に設定され、 'access-method-allow-origin'がオリジンヘッダーに設定されている限り、developer.mozilla.org/en-US/docs/HTTP_access_controlクーポン前のリクエストで指定された値を使用して、2つのドメイン間でクッキーを設定して送信する必要があります。 –

+0

ああ申し訳ありませんが、あなたは大丈夫です:*資格情報と共に使用することはできません。しかし、明快にあなたの例を更新することができます。クライアントコードとサーバーコードの両方に "someotherdomain"文字列を表示するのは混乱します。 – monsur

+0

さらに、それは実際にはhttps://www.owasp.org/index.php/HTML5_Security_Cheat_SheetによるCORS実装の「悪い習慣」です –

関連する問題