web-dev-qa-db-ja.com

Oauthトークンをクライアント側のJavaScriptに渡して、サーバーに直接リクエストできるようにしても安全ですか?

現在、ドメイン(example.com)から提供されるシンプルなbackbone.jsアプリケーションがあり、これにはOauthトークンが提供されています。具体的には、Oauthトークンをページテンプレートからjavascriptクラス(バックボーンモデル)のコンストラクター引数に渡します。backbone.jsアプリケーション(ブラウザーで実行)は、Oauthトークンを使用してリモートサーバーと直接通信します(ページの提供元のサーバーとは異なります)。

JavaScriptコードにOauthトークンをこのように提供しても安全ですか?

ページ全体がhttpsを介して提供されるため、MITM攻撃の心配は事実上ありません。ブラウザーには、ユーザーのセッションIDが含まれたCookieも含まれているため、ブラウザーのJavaScriptにOauthトークンを提供することと同じです。

これがひどい場合、使用できる代替方法はありますか? OauthトークンをCookieに格納する方が良いでしょうか?(セッションIDをCookieに格納するのと同じセキュリティ上の意味があります)。

6
DJSunny

OAuthベアラートークンは、認証された状態を保持するために使用されるセッション状態を維持する方法であり、パスワードと同様に保護する必要があります。 backbone.jsクライアントの場合、攻撃者はxssを使用してこの値を取得する可能性があります。 oauthトークンをcookieとして保存すると、xssペイロードがこの値を読み取れないようにするhttponlyフラグを使用できます。 oauthトークンがhttponly cookieで保護されている場合でも、xssを使用して、特別に細工されたJavaScriptペイロードで認証済みAPIにアクセスできます。 Cookieは他の方法よりも優れていますが、xssとcsrfは依然として大きな懸念事項です。

7
rook