ThymeleafでXSS対策をする方法
ThymeleafでXSS(クロスサイトスクリプティング)対策をするには、以下の方法が考えられます。
1. 自動エスケープ
ThymeleafはデフォルトでHTMLエスケープを行います。
テンプレート内の変数は自動的にエスケープされ、XSS攻撃から保護されます。
<p th:text="${userInput}">ユーザー入力</p>
上記の例では、userInput の内容は自動的にエスケープされ、HTMLタグやスクリプトがそのまま出力されることはありません。
2. th:utext と th:text の使い分け
th:text は自動的にエスケープを行いますが、th:utext はエスケープを行わず、HTMLとして出力します。
th:utext を使用する場合は、内容が信頼できるものであることを確認してください。
<p th:utext="${trustedHtmlContent}">信頼できるHTMLコンテンツ</p>
3. 属性値にエスケープを使用
属性値に直接ユーザー入力を埋め込む場合もエスケープが必要です。
th:attr を使ってエスケープされた属性値を設定することができます。
<a th:href="@{${url}}">リンク</a>
4. th:if や th:unless で条件を指定する
条件によって出力を制御することで、意図しない内容の表示を防ぐことができます。
<p th:if="${userInput != null}" th:text="${userInput}">ユーザー入力</p>
5. カスタムエスケープ関数の作成
特殊なエスケープ処理が必要な場合、自分でカスタムエスケープ関数を作成し、Thymeleafのテンプレートで使用することもできます。
import org.thymeleaf.context.IContext; public class MyCustomFunctions { public static String escapeHtml(String input) { // カスタムエスケープ処理 return StringEscapeUtils.escapeHtml4(input); } }
Thymeleafのテンプレート内での使用例:
<p th:text="${@myCustomFunctions.escapeHtml(userInput)}">ユーザー入力</p>
これらの方法を組み合わせて使用することで、Thymeleafを使用したアプリケーションでのXSS対策を強化できます。