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内で安全にパラメータを渡すことができます。