JDBC系列--解决简单的SQL注入问题

简介: JDBC系列--解决简单的SQL注入问题

Preparedstatement :执行sql的对象


1. SQL注入问题


用户随便输入密码:a' or 'a' = 'a

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

拼接后的sql:select * from user where username = 'dafsdfda' and password = 'a' or 'a' = 'a'

请输入username: fassag 请输入password a' or 'a' = 'a Success!!!!!!


解决方案


通过Preparedstatement :执行sql

它是预编译的SQL( 一次编译、多次运行,省去了解析优化等过程,此外预编译语句能防止sql注入 。)

参数使用?作为占位符

全部的流程为:

步骠: 1.导入驱动jar包mysql-connector-java-5.1.37-bin.jar

2.注册驱动

3.获取数据库连接对象connection

4.定义sql 注意:sql的参数使用?作为占位符。如: select * from user where username ? and password ?;

5.获取执行sql语句的对象preparedstatement Connection.preparestatement(string sql) 6.给?赋值: *方法: setXXX(参数1,参数2) 参数1:?的位置编号 从1开始

参数2:?的值

7、执行sql,接受返回结果,不需要传递sql语句

8.处理结果

9.释放资源


小实例:


package cn.caq.jdbc;
import cn.caq.utils.JDBCutils;
import java.sql.*;
import java.util.Scanner;
/**
 * 需求:
 * 1.通过键盘录入用户名和密码
 * 2.判断用户是否登录成功
 */
public class JDBCDemo09 {
    public static void main(String[]args){
        //1.键盘录入,接受用户名和密码
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入username:");
        String username = scanner.nextLine();
        System.out.println("请输入password");
        String password = scanner.nextLine();
        //2.调用方法
//        JDBCDemo08 jdbcDemo08 = new JDBCDemo08();
//        boolean login = jdbcDemo08.login(username, password);
        boolean flag = new JDBCDemo09().login2(username, password);
        //3.判断结果,输出不同语句
        if (flag){
            System.out.println("Success!!!!!!");
        }else {
            System.out.println("username or passwd False!!!!!!!!");
        }
    }
    //登录方法
    public boolean login2(String username,String password){
        if (username == null || password == null){
            return false;
        }
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        //1.连接数据库
        try {
            conn = JDBCutils.getConnection();
            //2.定义sql
            String sql = "select * from user where username = ? and password = ?";
            //3.获取执行sql的对象
            pstmt = conn.prepareStatement(sql);
            //给?赋值
            pstmt.setString(1,username);
            pstmt.setString(2,password);
            //4.执行sql语句
            rs = pstmt.executeQuery();
            //5.判断
            return rs.next();//有下一行返回true
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            JDBCutils.close(rs,pstmt,conn);
        }
        return false;//如果出现异常返回false
    }
}

SQL注入一般是通过利用SQL语句的规则使条件成立 它是

预编译的SQL( 一次编译、多次运行,省去了解析优化等过程,此外预编译语句能防止sql注入 。)

参数使用?作为占位符

能够解决简单的SQL注入的问题!!!


相关文章
|
2月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
64 2
|
4月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
146 5
|
4月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
89 5
|
4月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
138 1
|
4月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
66 1
|
4月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
61 3
|
3月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
74 0
|
3月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
119 0
|
3月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
56 0
|
3月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
71 0