Thymeleafでエンコード処理

Thymeleafでエンコード処理

Thymeleafでエンコード処理を行いたい場合、HTML内でエスケープ処理を適切に行うことができます。
Thymeleafは自動的にHTMLエスケープを行うため、ユーザーからの入力やデータベースから取得したデータがHTMLとして解釈されないように保護します。
ただし、特定の場面では手動でエンコードやエスケープを行う必要がある場合もあります。

1. HTMLエスケープ

ThymeleafはデフォルトでHTMLエスケープを行います。
たとえば、次のようにth:textを使うと、HTML特殊文字が自動的にエスケープされます。

<p th:text="${userInput}"></p>

ここで、userInputが例えばJavascriptのalert('XSS')の場合、

タグ内にそのまま表示されることはなく、エスケープされた文字列として表示されます。

2. 手動エスケープ

手動でエスケープ処理を行いたい場合、Thymeleafのth:utextを使うことができます。
th:utextはエスケープせずに直接HTMLを出力しますが、XSS対策として慎重に使用する必要があります。

<p th:utext="${htmlContent}"></p>

3. URLエンコード

URLエンコードが必要な場合、Thymeleafの標準機能では対応していないため、Javaコードでエンコード処理を行う必要があります。
例えば、以下のようにコントローラでエンコード処理を行います。

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

@Controller
public class MyController {

    @GetMapping("/example")
    public String example(Model model) throws UnsupportedEncodingException {
        String userInput = "example input";
        String encodedInput = URLEncoder.encode(userInput, StandardCharsets.UTF_8.toString());
        model.addAttribute("encodedInput", encodedInput);
        return "example";
    }
}

HTML内での使用例:

<a href="/path?param=[[${encodedInput}]]">リンク</a>

これにより、URL内で安全にパラメータを渡すことができます。