HTML注入
在JSP开发中,经常会提交一些包含“<”、“>”等特殊HTML字符的数据,如果程序不对这些特殊字符进行转换,浏览器将把这些特殊字符当做HTML标签进行解释执行,这就是所谓的“HTML注入”。接下来通过一个用户留言的案例来演示HTML注入,具体步骤如下:
(1)在Web工程chapter07的WebContent根目录中,新建一个displayMessage.jsp文件,displayMessage.jsp文件的具体实现代码如例1所示。
例1 displayMessage.jsp
1 <%@ page language="java" pageEncoding="UTF-8"%>
2 <html>
3 <body>
4 <form action="ResultServlet" method="post">
5 用户名:<input type="text" name="username"><br>
6 留 言:
7 <textarea rows="6" cols="50" name="message"></textarea>
8 <br> <input type="submit" value="提交">
9 </form>
10 </body>
11 </html>
(2)编写ResultServlet,该Servlet用于获取用户名和留言内容,ResultServlet的具体实现代码如例2所示。
例2 ResultServlet.java
1 package cn.itcast.chapter07.servlet;
2 import java.io.IOException;
3 import javax.servlet.*;
4 import javax.servlet.http.*;
5 public class ResultServlet extends HttpServlet {
6 protected void doPost(HttpServletRequest request, HttpServletResponse
7 response) throws ServletException, IOException {
8 request.setCharacterEncoding("UTF-8");
9 String name = request.getParameter("username");
10 String message = request.getParameter("message");
11 request.setAttribute("name", name);
12 request.setAttribute("message", message);
13 request.getRequestDispatcher("/result.jsp")
14 .forward(request, response);
15 }
16 protected void doGet(HttpServletRequest request, HttpServletResponse
17 response) throws ServletException, IOException {
18 this.doPost(request, response);
19 }
20 }
(3)编写result.jsp文件,该文件用于显示用户名和留言内容,result.jsp的具体实现代码如例3所示。
例3 result.jsp
1 <%@ page language="java" pageEncoding="UTF-8"%>
2 <html>
3 <head>
4 <title>Insert title here</title>
5 </head>
6 <body>
7 用户名:${name}<br />
8 留言内容:${message}
9 </body>
10 </html>
(4)启动Tomcat服务器,在浏览器中输入URL地址http://localhost:8080/chapter07/displayMessage.jsp
访问displayMessage.jsp页面,并在对应的输入框填写内容,具体如图1所示。
图1 运行结果
点击图1所示的“提交”按钮,浏览器显示的结果如2所示。
图2 运行结果
从图2可以看出,浏览器弹出了一个网页的消息窗口,说明浏览器将displayMessage.jsp文件中的JS代码当作普通HTML进行解析了,实现了“HTML注入”。