从0到1java安全1

从0到1java安全1

img

img

环境准备

https://www.jetbrains.com/idea/ 	#idea下载
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1774786&highlight=idea		#idea在线激活
汉化插件
java 1.8
tomacat 9.0

demo测试[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

简单测试,不选数据库了

在这里插入图片描述

解决控制台乱码

在这里插入图片描述

帮助-》编辑自定义VM选项

-Dfile.encoding=UTF-8

在这里插入图片描述

运行默写代码片段时,点击绿的三角就可以执行

在这里插入图片描述

知识点

JavaEE-HTTP-Servlet&路由&周期

#JavaEE-HTTP-Servlet&路由&周期
参考:https://blog.youkuaiyun.com/qq_52173163/article/details/121110753
解释
Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。使用Servlet可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。本章内容详细讲解了web开发的相关内容以及servlet相关内容的配置使用,是JAVAEE开发的重中之重。

创建和使用Servlet
-创建一个类继承HttpServlet
-web.xml配置Servlet路由
-WebServlet配置Servlet路由
-写入内置方法(init service destroy doget dopost)

Servlet生命周期


处理接受和回显
HttpServletRequest是ServletRequest的子接口
getParameter(name) — String 通过name获得值
getParameterValues — String[ ] 通过name获得多值

HttpServletResponse是ServletResponse的子接口 
setCharacterEncoding() 设置编码格式
setContentType() 设置解析语言
getWriter() 获得一个PrintWriter字符输出流输出数据
PrintWriter 接受符合类型数据


JavaEE-数据库-JDBC&Mybatis&库

#JavaEE-数据库-JDBC&Mybatis&库
-原生态数据库开发:JDBC
参考:https://www.jianshu.com/p/ed1a59750127
JDBC(Java Database connectivity): 由java提供,用于访问数据库的统一API接口规范.数据库驱动: 由各个数据库厂商提供,用于访问数据库的jar包(JDBC的具体实现),遵循JDBC接口,以便java程序员使用!
1、下载jar
https://mvnrepository.com/
2、引用封装jar
创建lib目录,复制导入后,添加为库
3、注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
4、建立数据库连接
String url ="jdbc:mysql://localhost:3306/demo01";
Connection connection=DriverManager.getConnection(url,"x","x");
5、创建Statement执行SQL
Statement statement= connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
6、结果ResultSet进行提取
while (resultSet.next()){
    int id = resultSet.getInt("id");
    String page_title = resultSet.getString("page_title");
    .......
}

安全修复SQL注入:预编译
原理:提前编译好执行逻辑,你注入的语句不会改变原有逻辑!

-框架数据库开发:Mybatis
Mybatis是一款优秀的持久层框架,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程,减少了代码的冗余,减少程序员的操作。

jdbc操作mysql

//mysql-connector-java-5.1.47.jar
//在目录下建一个lib,并加入到库文件当中
//这边用的数据库的例子是从xhcms的数据库中拿到的文件

package com.example.demo;
import java.sql.*;

public class MyselectServiet {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName(“com.mysql.jdbc.Driver”);
String url = “jdbc:mysql://localhost:3306/xhcms”;
Connection connection = DriverManager.getConnection(url,“xhcms”,“admin123”);
System.out.println(connection);

    String sql = "select * from manage";
    Statement statement = connection.createStatement();
    ResultSet rs = statement.executeQuery(sql);     //com.mysql.jdbc.JDBC4Connection@506c589e

    while (rs.next()){
        int id =rs.getInt("id");
        String name = rs.getString("name");
        String qq = rs.getString("qq");
        String mail = rs.getString("mail");
        System.out.println(id+"||"+name+"||"+qq+"||"+mail);
    }




}

}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

预编译技术后边会讲到,在java当中比较容易实现所以不容易出现sql注入

String sql = "select * from manage where id="+id;	//拼接写法
String sql = "select * from manage where id=?";		//预编译写法

JavaEE-jdbc预编译-SQL

预编译SQL语句并执行,预防SQL注入问题

普通查询

//mysql-connector-java-5.1.47.jar
//在目录下建一个lib,并加入到库文件当中
//这边用的数据库的例子是从xhcms的数据库中拿到的文件

package com.example.demo;
import java.sql.*;
import java.util.Scanner;

public class MyselectServiet {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        //通过输入id,来查找对应的值
        Scanner scanner = new Scanner(System.in);
        System.out.print("please inout id:");
        String s = scanner.nextLine();
        //System.out.println(s);


        //数据库查询
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/xhcms";
        Connection connection = DriverManager.getConnection(url,"xhcms","admin123");
        //System.out.println(connection);

        //通过传入的id值来进行查询
        String sql = "select * from manage where id="+s;
        System.out.println(sql);
        Statement statement = connection.createStatement();
        ResultSet rs = statement.executeQuery(sql);
        //System.out.println(rs);

        //拿到对应的查询值进行输出
        while (rs.next()){
            int id =rs.getInt("id");
            String name = rs.getString("name");
            String qq = rs.getString("qq");
            String mail = rs.getString("mail");
            System.out.println(id+"||"+name+"||"+qq+"||"+mail);
        }
    }
}

预编译的写法

String safesql="select * from news where id=?";
PreparedStatement preparedStatement=connection.prepareStatement();
preparedStatement.setString(1,s);
ResultSet resultSet=preparedStatement.executeQuery();

预编译实现

//mysql-connector-java-5.1.47.jar
//在目录下建一个lib,并加入到库文件当中
//这边用的数据库的例子是从xhcms的数据库中拿到的文件

package com.example.demo;
import java.sql.*;
import java.util.Scanner;

public class MyselectServiet {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        //通过输入id,来查找对应的值
        Scanner scanner = new Scanner(System.in);
        System.out.print("please inout id:");
        String s = scanner.nextLine();
        //System.out.println(s);


        //数据库查询
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/xhcms";
        Connection connection = DriverManager.getConnection(url,"xhcms","admin123");
        //System.out.println(connection);

/*      //通过传入的id值来进行查询,普通写法
        String sql = "select * from manage where id="+s;
        System.out.println(sql);
        Statement statement = connection.createStatement();
        ResultSet rs = statement.executeQuery(sql);
        //System.out.println(rs);*/

        //预编译写法
        String safesql="select * from manage where id=?";
        PreparedStatement preparedStatement=connection.prepareStatement(safesql);
        preparedStatement.setString(1,s);
        ResultSet rs=preparedStatement.executeQuery();
        System.out.println(safesql);


        //拿到对应的查询值进行输出
        while (rs.next()){
            int id =rs.getInt("id");
            String name = rs.getString("name");
            String qq = rs.getString("qq");
            String mail = rs.getString("mail");
            System.out.println(id+"||"+name+"||"+qq+"||"+mail);
        }


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值