2012-02-20 24 views
2

サードパーティのウェブサイト、つまりGoogleサービスにサインアップしてJavaScriptを埋め込んだ人には、「ウィジェット」があります。サードパーティのサイトで実行されている安全なJavaScript

現時点ではすべての通信にJSONPを使用しています。私たちはiFrameを使用して人に安全にサインインしたり、アカウントを作成したりすることができます。 (本質的に、iFramesのソースが、クライアントドメインのタイトルから成功の値を読み取る前に、そのドメインを指し示すまで待つ)。

我々はJSONPで実行しているので、私たちはユーザーがログインしているかどうかを検出するために、ブラウザのHTTPクッキーを使用することができます。

しかし、我々はリアルタイムに実行するために我々のシステムを移行する過程で、Web経由のですソケット。私たちはまだ同じ認証方法を持っていますが、JSONPを使って他の呼び出しを行う必要はありません。代わりに、これらの呼び出しはWebSocket上で発生します(ライブラリFayeを使用)

これをどのようにして保護できますか?潜在的なセキュリティホールは、誰かが既存のサイトからJavaScriptをコピーして変更した場合、代わりにサイトにアクセスするようになる場合です。私は悪意のあるJavaScriptがそれを読んでから認証されたアクションを実行できるようになるので、これがログイン時に安全なトークンを返すという私の元の考え方を破ったと思う。

通常のJSONPと私のWebSocket上のアップデートより安全な動作を保つ方が良いですか?

答えて

4

Websocket接続では、オープニングハンドシェイク中にのみCookieが受信されます。 websocket接続にアクセスできる唯一のサイトはそれを開いたサイトなので、認証後に接続を開くと、セキュリティは現在のJSONP実装に匹敵するものと推測されます。

JSONPの実装が安全であるとは限りません。そうではないことはわかりませんが、JSONPリクエストのリファラーをチェックして、本当にログインしているサードパーティの同じサイトから来ていることを確認していますか?そうでない場合は、JavaScriptを組み込んだ他のサイトから既にセキュリティ問題が発生しています。

いずれにしても、XSSの脆弱性を持つサードパーティはa very big problemでもありますが、おそらくあなたは既にそれを知っていると思われます。

0

WebSocketハンドシェイクをブラウザで開くときにクッキーを送信するかどうか(もしそうであれば、どのクッキー)がWS仕様で指定されていないか。それはブラウザベンダーに委ねられている。

WS接続は、のいずれかのサイトに開くことができます。これは、元々JSを接続していたサイトだけでなく、しかし、ブラウザはWSオープニングハンドシェイクの "Origin" HTTPヘッダーを、もともとJSを提供していたものに設定しなければならない(MUST)。サーバーは、接続を受け入れるか、拒否するかは自由に自由です。

JSでランダムな文字列を生成し、そのクライアント側を格納して、クライアントIPがWSの認証トークンの計算に参加するようにすることができます。

関連する問題