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でユーザー入力を適切にサニタイズし、セキュリティを確保することができます。