Tomcat部署程序避免jsp木马攻击

JSP的本质是servlet,当外面攻击者将jsp文件上传到程序目录下,就能通过访问jsp文件进行服务攻击,可以通过程序避免jsp文件上传。

如果jsp文件已经上传上去,可以避免jsp文件被直接访问,思路是通过servlet对*.jsp、*.jspx文件进行过滤,核心代码如下:

Servlet文件:

Object flag = request.getAttribute("org.apache.catalina.core.DISPATCHER_TYPE");
        if (flag != null)
        {
            if ((("javax.servlet.DispatcherType".equals(flag.getClass().getName())) &&
                    ("REQUEST".equals(flag.toString()))) || (
                    ((flag instanceof Integer)) && (((Integer)flag).intValue() == 8))) {
                response.setContentType("text/html;charset=UTF-8");
                Writer writer = response.getWriter();
                boolean isJspExist = new File(request.getServletContext().getRealPath(request.getServletPath())).exists();
                String htmlOutput = isJspExist ? "<!DOCTYPE html>\r\n<html lang=\"zh-cn\">\r\n<head>\r\n<title>由于安全原因JSP功能默认关闭</title></head>\r\n<body>由于安全原因,JSP功能默认被禁止</body>\r\n</html>";
                if (this.springBoot)
                    writer.write(htmlOutput.replace("##WARNINFO##", "如需开启请在SpringBoot启动程序中修改相关配置"));
                else {
                    writer.write(htmlOutput.replace("##WARNINFO##", "如需开启请编辑WEB应用的web.xml文件"));
                }
                writer.flush();
                writer.close();
                return;
            }
        }

web.xml中的配置:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>tomcat.SecurityJspServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jspx</url-pattern>
  </servlet-mapping>
发布了57 篇原创文章 · 获赞 39 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/SJZYLC/article/details/89073925
今日推荐