文字コードとHTMLエンコードとCross-Site Scriptingの微妙な関係の考察
ちょっと古いけど、
2006-03-27
2006-03-28
ここら辺の問題を、Servlet(Tomcat5.5)を使っていろいろ試してみました。
public class BreakQuote extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // request.setCharacterEncoding("Shift-JIS"); // response.setCharacterEncoding("Shift-JIS"); // response.setContentType("text/html; charset=Shift_JIS"); String id = request.getParameter("id"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<form method=\"POST\">"); out.println("<input type=\"text\" name=\"id\" value=\"" + id + "\">"); out.println("<input type=\"submit\" />"); out.println("</form>"); out.println("</body></html>"); } }
こんな感じでコードを書くと動きます。直感的には、Javaだと動かないんじゃね?って思ってたんですが、文字コード変換のメソッドを通過していない場合は動くみたいです。逆にコメントアウトしてあるコードのどれかを通過すると動きません。jspでは暗黙的にresponse.setContentType()が呼び出されるので動かないみたいです。
Accept-Language=ja 向けのシステムでは文字コード周りをしっかり設定しないと使い物になりませんが、Accept-Language=en 向けのシステムはそういう訳でもないため、注意が必要かもしれません。