【代码审计】JAVAWeb基础JSP

JAVAWeb基础JSP

0x00 版权声明

JAVA基础系列是笔者学习@炼石星球的笔记,大部分文字描述取自星球内发布的教程文件,仅作学习。

0x01 什么是JSP

JSP全称Java Server Page,基于Java语言,是一种动态网页技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

JSP本质是简化版的Servlet,JSP在编译后就变成了Servlet。JVM只能识别Java的类,是无法识别JSP代码的。所以WEB服务器会将JSP编译成JVM能识别的Java类。 JSP跟Servlet区别在于,JSP常用于动态页面显示,Servlet常用于逻辑控制。在代码中常使用JSP做前端动态页面,在接收到用户输入后交给对应的Servlet进行处理。当然JSP也可以当做后端代码进行逻辑控制

0x02 JSP基础知识

  • JSP文件后缀名为 *.jsp
  • JSP代码需要写在指定的标签之中:
1
2
3
4
5
6
7
<%
out.println("hellpo JSP!");
%>

<jsp:scriptlet>
代码片段
</jsp:scriptlet>
  • JSP生命周期: 编译阶段 -> 初始化阶段 -> 执行阶段 -> 销毁阶段 ,此处多了一个编译阶段,是将JSP编译成Servlet的阶段。而这个阶段也是有三个步骤的: 解析JSP文件 -> 将JSP文件转为servlet -> 编译servlet

0x03 运行JSP程序

第一步,引入jar包

在之前的章节:JAVAWeb基础第一个ServletJAVAWeb基础过滤器基础上,点击左上角 File - Project Structure - Libraries ,点击 + 号,进入Tomcat的lib文件夹下,将依赖全部引入:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209281140086.png

第二步,编写代码

login.jsp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"<http://www.w3.org/TR/html4/loose.dtd>">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>User to Register Page!</title>
</head>
<body>
<hr><br>登录页面<br>
<form action="do_login.jsp" method="get">
<br>
<h1>Please input your message:</h1><br>
Name:<input type="text" name="username"><br>
Pswd:<input type="password" name="password"><br>
<br><br><br>
<input type="submit">&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset">
<br>
</body>
</html>

do_login.jsp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"<http://www.w3.org/TR/html4/loose.dtd>">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Server to do the register page!</title>
</head>
<body>
<%
String username=request.getParameter("username");
String password=request.getParameter("password");
%>
<%
//模拟登录成功与否
if(username.equals("admin") && password.equals("password")){
response.getWriter().write("Success!");
}else {
response.getWriter().write("Error!");
}
%>
</body>
</html>

第三步,运行项目

运行之前,由于在前面配置了过滤器,所以需要删除之前在web.xml注册的过滤器,使之可以访问到login页面:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209251854754.png

启动项目,访问login.jsp页面:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209281400352.png

在登录页面输入正确和错误的口令: