标签:
几年前做项目,里面有个评论的功能,结果有人写了如下“神奇的”代码:
这些代码看不懂啊:<script type="text/javascript">alert(1);</script>那么在显示这条数据时使用了EL表达式,问题来了:每次访问这个页面,上面JavaScript脚本都会执行,怎么解决呢?不要着急,且听我娓娓道来(不装逼):
代码一—— 一个Servlet:
package com.ghj.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DataServlet extends HttpServlet { private static final long serialVersionUID = -1706600494313811422L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("data", "这些代码看不懂啊:<script type=\"text/javascript\">alert(1);</script>"); request.getRequestDispatcher("index.jsp").forward(request, response); } }代码二—— 一个jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>首页</title> </head> <body> 第一种方法:${data}<br/> 第二种方法:<c:out value="${data}"/><br/> 第三种方法:<%=request.getAttribute("data") %><br/> </body> </html>说明:上面使用三种不同的方法输出评论数据,通过实际操作会得出这样一个结论:只有第二种方法可靠,其它两种都会执行该JavaScript脚本;但是假如评论处使用了富文本编辑器,则又另当别论——这时还是用jstl,那么页面将面目全非。
标签:
原文地址:http://blog.csdn.net/gaohuanjie/article/details/50802242