1. 概要

Spring Webアプリケーションを構築するときは、セキュリティに重点を置くことが重要です。 クロスサイトスクリプティング(XSS)は、Webセキュリティに対する最も重大な攻撃の1つです。

XSS攻撃を防ぐことは、Springアプリケーションの課題です。 Springは、完全な保護のための組み込みのヘルプを提供します。

このチュートリアルでは、利用可能なSpringセキュリティ機能を使用します。

2. クロスサイトスクリプティング(XSS)攻撃とは何ですか?

2.1. 問題の定義

XSSは、一般的なタイプのインジェクション攻撃です。 XSSでは、攻撃者はWebアプリケーションで悪意のあるコードを実行しようとします。 WebブラウザまたはPostmanなどのHTTPクライアントツールを介して対話します。

XSS攻撃には2つのタイプがあります。

  • 反射型または非永続型XSS
  • 保存または永続的なXSS

ReflectedまたはNonpersistentXSSでは、信頼できないユーザーデータがWebアプリケーションに送信され、応答ですぐに返され、信頼できないコンテンツがページに追加されます。 Webブラウザーは、コードがWebサーバーからのものであると想定し、それを実行します。 これにより、ハッカーがリンクを送信し、それをたどると、ブラウザが使用しているサイトから個人データを取得し、ブラウザがそれをハッカーのサーバーに転送するようになる可能性があります。

StoredまたはPersistentXSSでは、攻撃者の入力はWebサーバーによって保存されます。 その後、将来の訪問者はその悪意のあるコードを実行する可能性があります。

2.2. 攻撃に対する防御

XSS攻撃を防ぐための主な戦略は、ユーザー入力をクリーンアップすることです。

Spring Webアプリケーションでは、ユーザーの入力はHTTPリクエストです。 攻撃を防ぐには、HTTPリクエストの内容を確認し、サーバーまたはブラウザで実行可能である可能性のあるものをすべて削除する必要があります。

Webブラウザからアクセスする通常のWebアプリケーションの場合、 Spring Security の組み込み機能(Reflected XSS)を使用できます。

3. SpringSecurityでアプリケーションXSSを安全にする

Spring Securityは、デフォルトでいくつかのセキュリティヘッダーを提供します。 X-XSS-Protectionヘッダーが含まれています。 X-XSS-保護は、XSSのように見えるものをブロックするようにブラウザに指示します。 Spring Securityは、このセキュリティヘッダーを応答に自動的に追加できます。 これをアクティブにするには、SpringSecurity構成クラスでXSSサポートを構成します。

この機能を使用すると、ブラウザーはXSSの試行を検出したときにレンダリングしません。 ただし、一部のWebブラウザーはXSS監査機能を実装していません。 この場合、彼らは利用しません X-XSS-保護ヘッダこの問題を克服するために、 コンテンツセキュリティポリシー(CSP) 特徴。

CSPは、XSSおよびデータインジェクション攻撃を軽減するのに役立つ追加のセキュリティレイヤーです。 これを有効にするには、 WebSecurityConfigurerAdapter Beanを提供して、Content-Security-Policyヘッダーを返すようにアプリケーションを構成する必要があります。

@Configuration
public class SecurityConf extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
          .headers()
          .xssProtection()
          .and()
          .contentSecurityPolicy("script-src 'self'");
    }
}

4. 結論

この記事では、SpringセキュリティのxssProtection機能を使用してXSS攻撃を防ぐ方法を説明しました。

いつものように、ソースコードはGitHubにあります。