演示Sql注入

在MySql中新建一个用户表user,存入用户和密码

import java.sql.*;

//演示SQL注入
public class JDBCDEMO4 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
    //   Class.forName("com.mysql.cj.jdbc.Driver");

        //2.获取连接
        //如果连接的是本机的mysql服务器,并且mysql的默认端口号是3306,则url可以写为jdbc:mysql:///db1
        String url="jdbc:mysql://127.0.0.1:3306/db1?serverTimezone=GMT&useSSL=false";
        String username="root";
        String password="20020630";
        Connection conn=DriverManager.getConnection(url,username,password);

        String name="张三";//用户的账号
        String pwd="1234";//用户的密码
        //3.定义sql

        String sql="select * from user where name='"+name+"'and pwd='"+pwd+"'";
        System.out.println(sql);

        Statement statement = conn.createStatement();
        ResultSet resultSet = statement.executeQuery(sql);
        if(resultSet.next()){
            System.out.println("登录成功");

        }
        else {
            System.out.println("登录失败");
        }

        //7.释放资源
        statement.close();
        conn.close();

    }
}

 随便写一个账号

密码改为

'or '1'='1
import java.sql.*;

//演示SQL注入
public class JDBCDEMO4 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
    //   Class.forName("com.mysql.cj.jdbc.Driver");

        //2.获取连接
        //如果连接的是本机的mysql服务器,并且mysql的默认端口号是3306,则url可以写为jdbc:mysql:///db1
        String url="jdbc:mysql://127.0.0.1:3306/db1?serverTimezone=GMT&useSSL=false";
        String username="root";
        String password="20020630";
        Connection conn=DriverManager.getConnection(url,username,password);

        String name="ddwqdsdasd";//用户的账号
        String pwd="'or '1'='1";//用户的密码
        //3.定义sql

        String sql="select * from user where name='"+name+"'and pwd='"+pwd+"'";
        System.out.println(sql);

        Statement statement = conn.createStatement();
        ResultSet resultSet = statement.executeQuery(sql);
        if(resultSet.next()){
            System.out.println("登录成功");

        }
        else {
            System.out.println("登录失败");
        }

        //7.释放资源
        statement.close();
        conn.close();

    }
}

 此时的sql语句变为了显示能够成功登录


使用PrepareStatement防止sql的注入

import java.sql.*;

//PrepareStatement
public class JDBCDEMO5 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
    //   Class.forName("com.mysql.cj.jdbc.Driver");

        //2.获取连接
        //如果连接的是本机的mysql服务器,并且mysql的默认端口号是3306,则url可以写为jdbc:mysql:///db1
        String url="jdbc:mysql://127.0.0.1:3306/db1?serverTimezone=GMT&useSSL=false";
        String username="root";
        String password="20020630";
        Connection conn=DriverManager.getConnection(url,username,password);

        String name="sdadsadsadasd";//用户的账号
        String pwd="'or '1'='1";//用户的密码
        //3.定义sql

        String sql="select * from user where name=? and pwd=?";
        System.out.println(sql);

        PreparedStatement statement = conn.prepareStatement(sql);
        statement.setString(1,name);
        statement.setString(2,pwd);
        ResultSet resultSet = statement.executeQuery();


        if(resultSet.next()){
            System.out.println("登录成功");

        }
        else {
            System.out.println("登录失败");
        }

        //7.释放资源
        statement.close();
        conn.close();

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值