Java代码审计基础知识「二」-java-web基础
Java代码审计基础知识「二」– java WEB基础-img
1、Java web – Servlet技术
1 | |
tomcat配置文件:
HttpServletRequest 简介(重点1)(重点都在这儿,特别是4)
1 | |
1、获取请求⾏的相关信息
1 | |
2、获取⽹络连接信息
1 | |
3、获取请求头信息
1 | |
4、获取请求参数(非常之重点)
1 | |
5、请求域属性
1 | |
HttpServletResponse简介
1 | |
2、搭建Java web环境
1 | |
在 Tomcat 中新建 Web 工程
1 | |
Tomcat路由访问
1 | |
– 在tomcat目录下创建web项目
1 | |
– 在项目下创建web项目
1、首先,创建一个普通的java项目。点击【file】-【new】-【project】
2、创建如下图
3、添加web部门。点击【file】-【project structure】
4、选择【modules】-选中项目“TomcatDemo”
5、点击项目名上的加号【+】,添加【web】模块
6、我们就会发现项目下多出了web模块
7、展开web包,在web包下创建一个index.jsp文件,在WEB-INF下创建classes和lib两个文件夹,如下图:
8、点击【File】-【Project structure】-【Modules】-选中项目名【TomcatDemo】-【Paths】-勾选【use module compile output path】-将output path设置为我们刚才创建的classes文件夹即可
9、点击【dependencies】-点击加号【+】-添加【JARs or directories】-选中Tomcat的lib目录
10、点击【Current File】-选择【edit configurations】
11、点击【edit configuration templates】-导入tomcat 配置如图2,点击OK
12、然后再点击左上角加号【+】添加Tomcat-local –配置如下
13、如果下面有warning提示,则点击fix,如图1,如果没有,则选择文件-项目结构-工件,然后如图2选择
14、点击确定后,然后回到 编辑配置-部署 点击+号,选择工件,点击确定
15、修改一下创建的index.jsp内容如下,并运行Tomcat
– 在项目下创建servlet项目……
1 | |
1、创建servlet项目
2、在工程上右键,选择【Add Framework Support】(如果没有的话,按两下shift,搜索添加框架支持,(英文的搜Add Framework Support)然后双击)
3、选择web应用程序
4、在/web/WEB-INF/下创建classes和lib文件夹
5、配置Project Structure:在Modules——Path下,修改Compiler Output,选择Use module compile output path,修改两个内容框为刚才新建的classes目录,点击OK
6、导入servlet-api.jar(也就是tomcat的lib目录)
7、编写servlet测试–新建ServletDemo1类
1 | |
8、添加Tomcat执行
3、JSP语法
1 | |
3.1、 JSP⾏为
1 | |
1 | |
| 标签 | 描述 |
|---|---|
| jsp:include | ⽤于在当前⻚⾯中包含静态或动态资源 |
| jsp:useBean | 寻找和初始化⼀个JavaBean组件 |
| jsp:setProperty | 设置 JavaBean组件的值 |
| jsp:getProperty | 将 JavaBean组件的值插⼊到output中 |
| jsp:forward | 从⼀个JSP⽂件向另⼀个⽂件传递⼀个包含⽤户请求的request对象 |
| jsp:plugin | ⽤于在⽣成的HTML⻚⾯中包含Applet和JavaBean对象 |
| jsp:element | 动态创建⼀个XML元素 |
| jsp:attribute | 定义动态创建的XML元素的属性 |
| jsp:body | 定义动态创建的XML元素的主体 |
| jsp:text | ⽤于封装模板数据 |
3.2、JSP指令
1 | |
1 | |
1 | |
| 指令 | 描述 |
|---|---|
| <%@ page … %> | 定义⽹⻚依赖属性,⽐如脚本语⾔、error⻚⾯、缓存需求等等 |
| <%@ include … %> | 包含其他⽂件 |
| <%@ taglib … %> | 引⼊标签库的定义 |
3.2.1、Page指令
1 | |
下表列出与Page指令相关的属性:
| 属性 | 描述 |
|---|---|
| buffer | 指定out对象使⽤缓冲区的⼤⼩ |
| autoFlush | 控制out对象的 缓存区 |
| contentType | 指定当前JSP⻚⾯的MIME类型和字符编码 |
| errorPage | 指定当JSP⻚⾯发⽣异常时需要转向的错误处理⻚⾯ |
| isErrorPage | 指定当前⻚⾯是否可以作为另⼀个JSP⻚⾯的错误处理⻚⾯ |
| extends | 指定servlet从哪⼀个类继承 |
| import | 导⼊要使⽤的Java类 |
| info | 定义JSP⻚⾯的描述信息 |
| isThreadSafe | 指定对JSP⻚⾯的访问是否为线程安全 |
| language | 定义JSP⻚⾯所⽤的脚本语⾔,默认是Java |
| session | 指定JSP⻚⾯是否使⽤session |
| isELIgnored | 指定是否执⾏EL表达式 |
| isScriptingEnabled | 确定脚本元素能否被使⽤ |
3.2.2、Include指令
1 | |
1 | |
3.2.3、Taglib指令
1 | |
1 | |
3.3、隐式对象
1 | |
JSP所⽀持的九⼤隐式对象:
| 对象 | 描述 |
|---|---|
| request | HttpServletRequest接口的实例 |
| response | HttpServletRespose接口的实例 |
| out | JspWriter类的实例,用于把结果输出到网页上 |
| session | HttpSession类的实例 |
| application | ServletContext类的实例,与应用上下文有关 |
| config | ServletConfig类的实例 |
| pageContext | PageContext类的实例,提供对JSP⻚⾯所有对象以及命名空间的访问 |
| page | 类似于Java类中的this关键字 |
| Exception | Exception类的对象,代表发⽣错误的JSP⻚⾯中对应的异常对象 |
3.4、常⽤的获取HTTP信息头的⽅法
| 序号 | 方法&描述 |
|---|---|
| 1 | Cookie[] getCookies()返回客户端所有的Cookie的数组 |
| 2 | Enumeration getAttributeNames()返request对象的所有属性名称的集合 |
| 3 | Enumeration getHeaderNames()返回所有HTTP头的名称集合 |
| 4 | Enumeration getParameterNames()返回请求中所有参数的集合 |
| 5 | HttpSession getSession()返回request对应的session对象,如果没有,则创建⼀个 |
| 6 | HttpSession getSession(boolean create)返回request对应的session对象,如果没有并且参数create为true,则返回⼀个新的session对象 |
| 7 | Locale getLocale()返回当前⻚的Locale对象,可以在response中设置 |
| 8 | Object getAttribute(String name)返回名称为name的属性值,如果不存在则返回null。 |
| 9 | ServletInputStream getInputStream()返回请求的输⼊流 |
| 10 | String getAuthType()返回认证⽅案的名称,⽤来保护servlet,⽐如 “BASIC” 或者”SSL” 或 null 如果 JSP没设置保护措施 |
| 11 | String getCharacterEncoding()返回request的字符编码集名称 |
| 12 | String getContentType()返回request主体的MIME类型,若未知则返回null |
| 13 | String getContextPath()返回request URI中指明的上下⽂路径 |
| 14 | String getHeader(String name)返回name指定的信息头 |
| 15 | String getMethod()返回此request中的HTTP⽅法,⽐如GET,,POST,或PUT |
| 16 | String getParameter(String name)返回此request中name指定的参数,若不存在则返回null |
| 17 | String getPathInfo()返回任何额外的与此request URL相关的路径 |
| 18 | String getProtocol()返回此request所使⽤的协议名和版本 |
| 19 | String getQueryString()返回此 request URL包含的查询字符串 |
| 20 | String getRemoteAddr()返回客户端的IP地址 |
| 21 | String getRemoteHost()返回客户端的完整名称 |
| 22 | String getRemoteUser()返回客户端通过登录认证的⽤户,若⽤户未认证则返回null |
| 23 | String getRequestURI()返回request的URI |
| 24 | String getRequestedSessionId()返回request指定的session ID |
| 25 | String getServletPath()返回所请求的servlet路径 |
| 26 | String[] getParameterValues(String name)返回指定名称的参数的所有值,若不存在则返回null |
| 27 | boolean isSecure()返回request是否使⽤了加密通道,⽐如HTTPS |
| 28 | int getContentLength()返回request主体所包含的字节数,若未知的返回-1 |
| 29 | int getIntHeader(String name)返回指定名称的request信息头的值 |
| 30 | int getServerPort()返回服务器端⼝号 |
3.5、 HttpServletResponse类
| 序号 | 方法&描述 |
|---|---|
| 1 | String encodeRedirectURL(String url)对sendRedirect()⽅法使⽤的URL进⾏编码 |
| 2 | String encodeURL(String url)将URL编码,回传包含Session ID的URL |
| 3 | boolean containsHeader(String name)返回指定的响应头是否存在 |
| 4 | boolean isCommitted()返回响应是否已经提交到客户端 |
| 5 | void addCookie(Cookie cookie)添加指定的cookie⾄响应中 |
| 6 | void addDateHeader(String name, long date)添加指定名称的响应头和⽇期值 |
| 7 | void addHeader(String name, String value)添加指定名称的响应头和值 |
| 8 | void addIntHeader(String name, int value)添加指定名称的响应头和int值 |
| 9 | void flushBuffer()将任何缓存中的内容写⼊客户端 |
| 10 | void reset()清除任何缓存中的任何数据,包括状态码和各种响应头 |
| 11 | void resetBuffer()清除基本的缓存数据,不包括响应头和状态码 |
| 12 | void sendError(int sc)使⽤指定的状态码向客户端发送⼀个出错响应,然后清除缓存 |
| 13 | void sendError(int sc, String msg)使⽤指定的状态码和消息向客户端发送⼀个出错响应 |
| 14 | void sendRedirect(String location)使⽤指定的URL向客户端发送⼀个临时的间接响应 |
| 15 | void setBufferSize(int size)设置响应体的缓存区⼤⼩ |
| 16 | void setCharacterEncoding(String charset)指定响应的编码集(MIME字符集),例如UTF-8 |
| 17 | void setContentLength(int len)指定HTTP servlets中响应的内容的⻓度,此⽅法⽤来设置 HTTP Content-Length 信息头 |
| 18 | void setContentType(String type)设置响应的内容的类型,如果响应还未被提交的话 |
| 19 | void setDateHeader(String name, long date)使⽤指定名称和⽇期设置响应头的名称和⽇期 |
| 20 | void setHeader(String name, String value)使⽤指定名称和值设置响应头的名称和内容 |
| 21 | void setIntHeader(String name, int value)指定 int 类型的值到 name 标头 |
| 22 | void setLocale(Locale loc)设置响应的语⾔环境,如果响应尚未被提交的话 |
4、MVC介绍
1 | |
5、过滤器Filter介绍
1 | |
1 | |
5.1、filter接口
public voic init(FilterConfig filterConfig) throws ServletException
1 | |
doFilter(ServletRequest request,ServletResponse response, FilterChain chain)throws java.io.IOException,ServletException:
1 | |
destroy⽅法
1 | |
5.2、FilterConfig 接⼝
1 | |
5.3、FilterChain接⼝
1 | |
Java代码审计基础知识「二」-java-web基础
http://aqiao-jashell.github.io/2025/08/15/Java代码审计基础知识「二」-java-web基础/