セキュリティに関する設定のまとめ

最終更新日: 2023年1月30日

HTTPヘッダ

Strict-Transport-Security9.2.0

Strict-Transport-Security ヘッダを設定することで HSTS (HTTP Strict Transport Security) が有効になります。これによってブラウザからサイトへの接続試行を HTTPS へ制限します。つまり HSTS では「HTTP による通信」が行われなくなるため、中間者攻撃による盗聴と通信改ざんのリスクが軽減されます。

R9.2.0 より、標準でこの設定が適用されます。httpsが有効な場合、次のヘッダが出力されます。

Strict-Transport-Security: max-age=31536000 ; includeSubDomains
(httpsが無効な環境では、ヘッダは出力されません。そのため開発環境で localhost でテストする場合は出力されないため、テスト環境に影響はありません。)

挙動を変更する

標準の動作をapplication.propertiesにて変更できます。関連する設定は次のとおりです。

wagby.security.httpStrictTransportSecurity.enable=true
wagby.security.httpStrictTransportSecurity.includeSubDomains=true
wagby.security.httpStrictTransportSecurity.preload=false
wagby.security.httpStrictTransportSecurity.maxAgeInSeconds=31536000

wagby.security.httpStrictTransportSecurity.enablefalseにすると、Strict-Transport-Securityヘッダは出力されません。

アプリケーションを http 接続で運用する

ビルドした wagbyapp アプリケーションを http 接続で運用する場合、さらに server.xml の修正が必要になります。具体的にはConnectorの設定にschema="https" secure="true"の設定を追加してください。サンプルを示します。

<Connector port="8921" protocol="HTTP/1.1"
  maxHttpHeaderSize="8192" maxThreads="150"
  enableLookups="false" redirectPort="18443" acceptCount="100"
  connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"
  server=" "
  compression="off" compressionMinSize="256"
  maxParameterCount="20000" schema="https" secure="true" />
(開発環境でこのヘッダの出力を確認したい場合や、wagbyappはhttpでアクセスできるが、ロードバランサ等でhttpsの処理を行う場合、この設定が必要となります。)
[browser] -- https --> [Load Balancer] -- http --> [wagbyapp]

詳細情報

Referrer-Policy9.2.0

ブラウザの Referrer を介し、ページの URL が外部サイトに共有されます。Wagbyの標準は「外部サイトに Referrer を提供しない (same-origin)」 とします。

(R9.2.0より前のWagbyは、このヘッダは出力されていません。)

挙動を変更する

標準の動作をapplication.propertiesにて変更できます。関連する設定は次のとおりです。

wagby.security.referrerPolicy=SAME_ORIGIN

次の値を指定することができます。

  • NO_REFERRER
  • NO_REFERRER_WHEN_DOWNGRADE
  • ORIGIN
  • ORIGIN_WHEN_CROSS_ORIGIN
  • SAME_ORIGIN (標準)
  • STRICT_ORIGIN
  • STRICT_ORIGIN_WHEN_CROSS_ORIGIN
  • UNSAFE_URL

詳細情報

Content-Security-Policy (CSP)9.2.0

すべてのレスポンスに Content-Security-Policy(CSP) を適切なパラメタとともに付与することで、クロスサイトスクリプティング脆弱性のリスクを低減できるようになります。
R9.2.0 より、この設定を行えるようになりました。

(R9.2.0より前のWagbyは、このヘッダは出力されません。)

挙動を変更する

CSPの値をapplication.propertiesにて変更できます。関連する設定は次のとおりです。

wagby.security.contentSecurityPolicy.enable=false
wagby.security.contentSecurityPolicy.policyDirectives=default-src 'self' 'unsafe-inline' 'unsafe-eval'
wagby.security.contentSecurityPolicy.reportOnly=false

wagby.security.contentSecurityPolicy.enabletrueにすることで、CSPの値をヘッダに含めることができます。このとき、上の設定を用いて、次の情報がヘッダに含まれるようになります。

Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval'

inlineのJavaScriptやevalはWagby内で使われているため、これを外すことはできません。また self は自分のホストからのみ各コンテンツを取得することを意味しますが、この設定があるとポートレットが外部の JavaScript を実行するような動作ができません。出力値を変更する場合、アプリケーションの動作上の制約にならないかどうかを検討の上、変更を行ってください。

詳細情報

Referrerチェック9.2.0

Referrerが正しいリンク元かを確認し、正しい場合のみ処理を実行するという制御を有効にします。

具体的にはReferrerの先頭部分が、指定した文字列であるかどうかをチェックします。異なる場合はエラー画面に遷移します。

標準はこの機能は無効です。後述する設定を行うことで有効にすることができます。

設定方法

正しいリンク元をapplication.propertiesで設定します。例を示します。

wagby.checkreferrer.url=http://localhost:8921/wagby/
wagby.checkreferrer.acceptempty=false
wagby.checkreferrer.excludepath=
wagby.checkreferrer.url

wagby.checkreferrer.urlを指定すると、チェックが有効となります。
ただしログオン画面とREST API(/logonPage.do,/logon.do,/rest/**,/v3/**)はチェックの対象外としています。REST API の CSRF 対策の詳細はこちらのページをお読みください。

wagby.checkreferrer.acceptempty

この設定が有効のとき、アドレスバーに直接入力した場合や、遷移元のページのReferrer policyによる "referrerを送信しない設定" の場合も、エラーと扱います。
wagby.checkreferrer.acceptemptytrueを設定すると、referrerが送信されていない場合にはエラーとならないようにすることができます。

wagby.checkreferrer.excludepath

wagby.checkreferrer.excludepathに、チェック対象外のページを指定することができます。

例えば "wagby.checkreferrer.excludepath=/showJuser.do" と指定すると、アカウント(juser)の詳細画面はReferrerチェックが行われないようになります。コンマ区切りで複数のページを指定することができます。