国外效果超炫网站,wordpress链接前面的图标,网站建设搭建是什么意思,wordpress上传媒体文件大小修改前言
java开发和其他开发的不同并且更安全就是因为他拥有简单的预编译机制 filter 过滤器 和 listener 监听器 这个很重要 就是 web应用监听器和过滤器是在 Servlet 之前的并且 我们的请求和响应都需要经过 两者的同意才可以通过 缺一不可 、
Listener
安全方面 监听器…前言
java开发和其他开发的不同并且更安全就是因为他拥有简单的预编译机制 filter 过滤器 和 listener 监听器 这个很重要 就是 web应用监听器和过滤器是在 Servlet 之前的并且 我们的请求和响应都需要经过 两者的同意才可以通过 缺一不可 、
Listener
安全方面 监听器的主要作用就是 内存马的使用内存马和普通的木马的根本区别就是 难杀 他是在内存的程序 而不是一个单一的文件 可以理解为普通的木马就是 一个文件 而内存马就是可以一直生成文件的一个程序
这个的路由问题是 过滤器都有特定的路由地址 但是监听器没有 监听器类似于 js事件有事件就会触发
Filter
过滤器是非常重要的一个功能 他就相当于安全狗 会指定一些过滤
Filter的部署 为了方便先创建 两个文件应用程序
没装备 过滤器时
package servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;import static java.lang.System.out;public class XianShi extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);String code req.getParameter(code);//传统的fileter 写法 if(codenull){out.println(请输入正确的值);}// 过滤器的创建req.setCharacterEncoding(utf-8);resp.setContentType(text/html);PrintWriter out resp.getWriter();out.println(codecode);out.flush();out.close();}
} web入口配置路由或者是直接 在当前页面上写入 Webservlet(/xxxx) 进行配置路由
访问code并输入Xss参数 就会出现 弹窗 那就可以使用filter进行阻断 过滤器其实就是放行器只有 我们的输入是满足条件的才会进行放行
新建一个Xss文件
创建类时使用
implements Filter
进行调用接口 然后 使用接口的三个类
因为Fileter的进行是在Servlet之前的
配置路由
WebFilter(/code)
这个是和 servlet是一致的 可千万别写为 WebServlet 这样就会造成服务的冲突
另外路由
在web.xml 中配置filterfilter-nameXss/filter-namefilter-classfilter.Xss/filter-class/filterfilter-mappingfilter-nameXss/filter-nameurl-pattern/code/url-pattern/filter-mapping
有Filter之后
package filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
WebFilter(/code)
public class Xss implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {
// Filter.super.init(filterConfig);System.out.println(Xss init);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest qingqiu (HttpServletRequest) servletRequest; //先接受get的值String code qingqiu.getParameter(code); //获取参数if (!code.contains()) { // 判断内容filterChain.doFilter(servletRequest, servletResponse); //把请求和响应放出}else {System.out.println(Xss code);}}Overridepublic void destroy() {
// Filter.super.destroy();System.out.println(Xss destroy);}
}
运行一下是不会触发的
简单Filter的内存马
filter内存马杀不死的原因就是因为他不是severlet层的 而是上一层的
哥斯拉生成一个木马 注意这个webapp才是应用程序
直接访问 哥斯拉连接 使用filter 可以进行删除过滤
监听器的部署
主要的用途就是记录访问的客流量等记录的功能
应用程序
package Linsten;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
WebServlet(/cs)
public class Cs extends HttpServlet {Overridepublic void init() throws ServletException {System.out.println(init);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// System.out.println(doGet);System.out.println(Servlet里面创建Session);//创建Sessionreq.getSession();//使用linsten 当}
}
监听器
package Linsten;import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;public class CL implements HttpSessionListener {public void sessionCreated(HttpSessionEvent se) {System.out.println(Session created);}
}SQl语句的预编译的调用
JDBC篇 先在 news 这个表里 加数据 2,3 条
不使用预编译使用拼接模式
import javax.servlet.http.HttpServlet;
import java.sql.*;
import java.util.Scanner;public class Select extends HttpServlet {public static void main(String[] args) throws ClassNotFoundException, SQLException {Scanner id1 new Scanner(System.in);System.out.println(请输入你要查询的id);String name id1.nextLine();System.out.println(name);//注册 驱动Class.forName(com.mysql.jdbc.Driver);// 建立数据库连接String url jdbc:mysql://localhost:3306/demo01;Connection con DriverManager.getConnection(url,root,123456);String sql select * from news where idname; // 拼接式的语句// 创建statementStatement huihua con.createStatement();ResultSet jieguohuihua.executeQuery(sql);// 结果的遍历//while(jieguo.next()){String idjieguo.getString(id);System.out.println(id);String titlejieguo.getString(page_title);System.out.println(title);String authorjieguo.getString(heading);System.out.println(author);String contentjieguo.getString(content);System.out.println(content);}}
} 可以被随意的sql注入
使用预编译
只需把我们的statement会话改为 preparedstatement 会话就行 执行预编译
//使用预编译写法String sql1select * from news where id?;PreparedStatement preparedStatementlianejie.prepareStatement();preparedStatement.setString(1,s);ResultSet jieguopreparedStatement.executeQuery();
预编译的原理就是使用固定的逻辑 ? 来防止多余的字段的注入或者其他逻辑的干扰