Cross Site Request Forgery (CSRF) protection changes in Atlassian REST

アトラシアン ナレッジベース

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

Atlassian REST の先日の変更を受け、リクエストのオリジンが信頼されない場合に一部のブラウザ リクエストがブロックされるようになりました。

次の条件が満たされる場合、REST リクエストのオリジンの CSRF チェックが行われます。

  1. リクエストが POST リクエストである (http 動詞が POST)
  2. リクエストが既知のブラウザから送信されている
  3. リクエストが次のいずれかに該当しない content-type を送信している
    1. application/x-www-form-urlencoded
    2. multipart/form-data
    3. text/plain
    4. 空白または指定なし

信頼されないオリジンが上の条件に該当するリクエストを送信しようとした場合、リクエストはブロックされ、次のようなログ エントリがご利用のアプリケーションのログ ファイルに記録されます。

 

2015-09-01 17:25:46.530585500 2015-09-01 07:25:46,530 ajp-nio-127.0.0.104-8009-exec-23 WARN anonymous 1045x1465x1 sibktb 127.0.0.1 /rest/auth/latest/session [c.a.p.r.c.security.jersey.XsrfResourceFilter] Additional XSRF checks failed for request: https://example.domain/rest/auth/latest/session , origin: https://another-origin.domain , referrer: null , credentials in request: true , allowed via CORS: false}}


症状

次の症状が確認され、これらは設定を修正することで解決されます。

  • Universal Plugin Manager を含むアドオンを Atlassian Marketplace から更新

 

CSRF オリジン保護の仕組み

CSRF オリジン保護は、受信リクエストのオリジンを origin および referer ヘッダーで比較することで動作します。簡潔に説明すると、リクエストのオリジンがアプリケーションそのものと同じオリジン であるか、リクエストのオリジンがアプリケーションによって信頼されているかどうかが確認されます。

 

例:

注意: https://trusted-origin.com はアプリケーションによって信頼されているとします。

リファラーのヘッダーの値オリジンのヘッダーの値アプリケーション URI許可されるかどうか
http://example.com http://example.com(tick) - ホスト、ポート、スキーマの一致
https://example.com/foobar https://example.com/example(tick) - ホスト、ポート、スキーマの一致
http://somethingelse.com http://example.com(error) - ホストの不一致
http://example.com:81/ http://example.com/(error) - ポートの不一致
http://example.com https://example.com(error) - スキーマの不一致。http != https
 http://example.comhttp://example.com(tick) - ホスト、ポート、スキーマの一致
 https://example.com/foobarhttps://example.com/example(tick) - ホスト、ポート、スキーマの一致
 http://somethingelse.comhttp://example.com(error) - ホストの不一致
 http://example.com:81/http://example.com/(error) - ポートの不一致
 http://example.comhttps://example.com(error) - スキーマの不一致。http != https
https://trusted-origin.com https://example.com(tick)- リクエストが信頼されるオリジンから送信されているため、許可。上記の前提にあるように、https://trusted-origin.com はアプリケーションで信頼されています。
 https://trusted-origin.comhttps://example.com/(tick)- リクエストが信頼されるオリジンから送信されているため、許可。上記の前提にあるように、https://trusted-origin.com はアプリケーションで信頼されています。 

修正方法

Bitbucket Server 5.0 以降では、Tomcat コネクタを直接構成することはできません。

server.xml 構成は <Bitbucket home directory>/shared/bitbucket.properties で置き換えられました。

server.xml のカスタマイズ設定を bitbucket.properties に移行する」をご参照ください。

これは通常、Tomcat のプロキシ構成の問題によって発生します。

アトラシアン アプリケーションがプロキシの背後で実行されているときにオリジン ベースの CSRF 保護の問題が発生する場合、server.xml で次のパラメーターが設定されているかどうかをご確認ください。

  • proxyName の構成内容が、アプリケーションがアクセスされているホスト名に一致するかどうか
  • proxyPort の構成内容が、アプリケーションがアクセスされているポートに一致するかどうか
  • scheme の構成内容が、アプリケーションがアクセスされているスキーマに一致するかどうか 

たとえば、Jira が Apache の背後で実行されていて、Jira にアクセスするための URL が https://example.domain/ である場合、正しいプロキシ設定は次のようになります。

  • proxyName="example.domain"
  • proxyPort="443"
  • scheme="https"

同じ例で server.xml に設定ミスがあり、HTTP を指すようにパラメーターが構成されている場合、次の UPM の問題が再現されます。

  • proxyName="example.domain"
  • proxyPort="80"
  • scheme="http"

Postman 拡張機能を利用した回避策

Postman のブラウザ拡張機能の利用をご希望の場合、Postman Interceptor ブラウザ拡張機能のインストールが必要になる場合があります。次の手順では同一オリジンのポリシーに従い、オリジンのヘッダーをリクエスト宛先と同じオリジンに設定しています。

  • Postman アプリケーションの上部で 'Proxy / Interceptor' ボタンをクリックします。
  • 指示にしたがって Postman Interceptor をインストールします。
  • Postman で Intercepter を有効化します。
  • [Headers] タブで、Origin をリクエストの送信先のサーバーに、Content-Type を application/json に更新します。

たとえば Postman を利用して https://foobar.example/ にリクエストを送信したい場合、Origin のヘッダーを https://foobar.example/ に設定します。

 

最終更新日 2018 年 11 月 2 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.