Thymeleafでサニタイズ処理

Thymeleafでサニタイズ処理

Thymeleafでサニタイズ処理を行う方法はいくつかあります。
ここでは、ユーザー入力をエスケープしてサニタイズする基本的な方法を紹介します。

## 1. エスケープする方法

自動エスケープ

ThymeleafはデフォルトでHTMLエスケープを行います。
これは、通常のth:text属性を使用する場合に自動的に行われます。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>Example</title>
</head>
<body>
  <div th:text="${userInput}">ここにユーザー入力が表示されます</div>
</body>
</html>

上記のように記述することで、${userInput}に含まれる特殊文字(例えば、<, >, &など)が自動的にエスケープされます。

明示的なエスケープ

特定の部分だけを明示的にエスケープしたい場合、|を使用してエスケープすることができます。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>Example</title>
</head>
<body>
  <div th:text="|${userInput}|">ここにユーザー入力が表示されます</div>
</body>
</html>

## 2. Javaコードでエスケープ

Javaコードでユーザー入力をエスケープする場合、Apache Commons LangのStringEscapeUtilsを使用することができます。

依存関係を追加(Mavenの場合)

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.12.0</version>
</dependency>

Javaコード例

import org.apache.commons.text.StringEscapeUtils;

public class SanitizationExample {
  public String sanitizeInput(String input) {
    return StringEscapeUtils.escapeHtml4(input);
  }
}

このようにして、StringEscapeUtils.escapeHtml4(input)メソッドを使用してユーザー入力をサニタイズすることができます。

## 3. HTMLサニタイズライブラリを使用

入力内容をさらに厳格にサニタイズする場合、OWASP Java HTML Sanitizerのようなライブラリを使用することも検討してください。

依存関係を追加(Mavenの場合)

<dependency>
  <groupId>com.googlecode.owasp-java-html-sanitizer</groupId>
  <artifactId>owasp-java-html-sanitizer</artifactId>
  <version>20180219.1</version>
</dependency>

Javaコード例

import org.owasp.html.PolicyFactory;
import org.owasp.html.Sanitizers;

public class SanitizationExample {
  public String sanitizeInput(String input) {
    PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS);
    return policy.sanitize(input);
  }
}

上記の方法を使用して、Thymeleafでユーザー入力を適切にサニタイズし、セキュリティを確保することができます。