IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]这是一条“神奇”的评论

    wangshuxuncom发表于 2016-03-04 14:24:33
    love 0

            几年前做项目,里面有个评论的功能,结果有人写了如下“神奇的”代码:

    这些代码看不懂啊:<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,那么页面将面目全非。



沪ICP备19023445号-2号
友情链接