JDBC-SQL注入攻击问题及解决方案

本文介绍了SQL注入的概念,通过示例展示了SQL注入攻击的可能性。为了解决这个问题,文章推荐使用预编译的PreparedStatement对象,详细阐述了其优势,包括防止SQL注入、提高执行效率和提升代码的优雅性。此外,还对比了PreparedStatement与Statement的区别,并提供了相关代码演示。
摘要由CSDN通过智能技术生成
什么是SQL注入:

由于dao层中执行的SQL语句是拼接出来的,其中一部分内容是用户从用户端输入的,当传入数据包含SQL关键字时,就有可能通过这些关键字来改变SQL的语义,从而执行一些特殊的操作,这就称为SQL注入问题。

SQL注入攻击演示:

首先我们创建一张用户表,里面包含用户名和密码。

mysql> select * from user;
+----------+----------+
| username | password |
+----------+----------+
| 满满     |   123456 |
+----------+----------+
1 row in set (0.00 sec)
正常查询:
package com.JDBC;

import java.sql.*;

/**
 * @Created with IntelliJ IDEA
 * @Description:
 * @Package: com.JDBC
 * @author: FLy-Fly-Zhang
 * @Date: 2019/7/6
 * @Time: 18:03
 */
public class JDBCDemo1 {
   
    public static boolean login(String userName,String passwd){
   
        boolean result=false;
        try {
   
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection =DriverManager.getConnection("jdbc:mysql://localhost:3306/sqldemo?SSL=false&serverTimezone=UTC","root","123456");
            String sql="select * from user where username="+userName+"and password="+passwd;
            Statement statement=connection.createStatement();
            ResultSet resultSet=statement.executeQuery(sql);
            if(res
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值