14

ステートレス RESTful サービスに対してクロスサイト リクエスト フォージェリは可能ですか?

私は、Cookie を介してログインしていることをサーバーが記憶する疑似 REST について話しているのではありません。私が話しているのは、Cookie を使用しない純粋なサーバー上でのアプリケーション状態のない REST です。

SSL と基本認証を使用しています。すべてのリクエストに対して、その Authorization ヘッダーが存在する必要があります。SSL レベルにはある種のセッションがありますが、JSP の意味での「セッション」はありません。

そこで、Ajax リクエストを行う正当な Web ページを表示していて、何らかの方法で同じタブまたは別のタブの別のページに移動し、そのページが同じ Ajax リクエストを行うとします。(正規の Web ページには悪意のあるコードはないと仮定しています。それはまったく別のことであり、その場合は何でも可能です。)

2 番目のページが Ajax リクエストを行うとき、ブラウザーは同じ Authorization ヘッダーを設定しますか? つまり、ブラウザは「ああ、またそこに行きたいですか?たまたままだ鍵を持っているだけです!」と言うでしょうか?

また、悪意のあるスクリプトが xhr リクエストを実行し、コールバックで ioargs からリクエストを取得し、Authorization ヘッダーを取得して、名前とパスワードを Base64 で解除することはできませんか?

4

2 に答える 2

4

免責事項:私はセキュリティの専門家ではありません。

HTTP基本認証を使用しても、GETリクエストを介したCSRF攻撃を防ぐことはできません。たとえば、他の誰かがHTMLページに有名なURIでGETを実行するimgタグを含めることができ、ブラウザは基本認証情報を喜んで送信します。GET操作が「安全」である場合(これはRESTfulであると主張するものの第1のルールです)、これは問題を引き起こしません(無駄な帯域幅を超えて)。

同一生成元ポリシーのため、Ajaxは問題ではありません。

生成するHTMLにサーバーで生成されたトークンを含め、フォーム送信リクエストでその存在を検証するだけで、他の誰かがページに「外部」フォームを含めるだけで保護されます。これをブラウザによって生成されたコンテンツタイプに制限することができます。XHRリクエストの場合はそうする必要はありません。

于 2010-01-08T15:05:08.110 に答える