JSPのサニタイズについて
まず以下のJSPがあります。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>サニタイズサンプル</title> </head> <body> <h1>サニタイズサンプル</h1> <form action="sanitize.jsp" method="POST"> <input type="text" name="input"> <button type="submit">送信</button> </form> ${param['input']} </body> </html>
フォームで入力された値を出力するだけです。
しかしこのままではフォームにscriptタグを埋め込み実行させることができてしまいます。
このクロスサイトスクリプティングを防ぐには「サニタイズ」という、特殊文字の置換が必要になります。
「<」、「>」、「%」、「“」、「‘」などはサニタイズが必要となります。
自分で組むとなると面倒ですが、Coreタグライブラリのを使えば自動でサニタイズしてくれます。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>サニタイズサンプル</title> </head> <body> <h1>サニタイズサンプル</h1> <form action="sanitize.jsp" method="POST"> <input type="text" name="input"> <button type="submit">送信</button> </form> <c:out value="${param['input']}"/> </body> </html>
これで問題ありません。
Coreタグライブラリを使用するにはライブラリの追加が必要なので気をつけてください。
JSTLのサイトからjarファイルをダウンロードし、ビルドパスを通してください。
https://tomcat.apache.org/taglibs/standard/