代码编织梦想

package com.bjpowernode.jdbc;

import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Scanner;
/**
 * 如果输入的用户名和密码是下面这样的,就会发生非注册人员登录的情况,叫做SQL注入现象
 *     用户名:asd
 *     密码:asd' or '1' = '1
 *
 *     输入上面的用户名和密码以后会拼接出来下面的sql语句,为此会发生SQL注入现象
 *     select * from t_user where login_name = 'asd' and login_pwd = 'asd' or '1' = '1'  因为这里的  1=1  恒成立
 *
 *     这是发生在接收用户输入,接收一行的情况下: String loginName = s.nextLine();//接收一行的输入
 *
 *     这是黑客使用的一种办法。
 *
 *     导致SQL注入的根本原因是:用户不是一般的用户,用户是懂得程序的,他输入的用户名和密码信息中含有sql语句的关键字,这些信息
 *                             与底层的sql语句进行了字符串的拼接,导致了原sql语句的含义被扭曲了。用户提供的信息参与了sql语
 *                             句的编译。(这个程序是先进行字符串的拼接,然后再进行sql语句的编译,所以才会发生注入现象)
 */
public class SQL注入现象 {
    public static void main(String[] args) {
        //初始化一个界面,让用户输入用户名和密码
        Map<String,String> userLoginInfo = initUI();

        //连接数据库验证用户名和密码是否正确
        boolean ok = checkNameAndPwd(userLoginInfo.get("loginName"),userLoginInfo.get("loginPwd"));

        System.out.println(ok ? "登录成功" : "登录失败");
    }

    /**
     * 验证用户名和密码
     * @param loginName  登录名
     * @param loginPwd  登录密码
     * @return  true表示登录成功,false表示登录失败。
     */
    private static boolean checkNameAndPwd(String loginName, String loginPwd) {
        ResourceBundle bundle = ResourceBundle.getBundle("resources\\db");
        String driver = bundle.getString("driver");
        String url = bundle.getString("url");
        String user = bundle.getString("user");
        String password = bundle.getString("password");
        boolean ok = false;//这里准备一个boolean类型的变量,默认是false表示登录失败
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1.注册驱动
            Class.forName(driver);
            //2.获取连接
            conn = DriverManager.getConnection(url,user,password);
            //3.获取数据库操作对象
            stmt = conn.createStatement();
            //4.执行SQL
            String sql = "select * from t_user where login_name = '" + loginName + "' and login_pwd = '" + loginPwd + "'";
            System.out.println(sql);

            rs = stmt.executeQuery(sql);//程序执行到这里,才会将以上的sql语句发送到DBMS上。DBMS进行sql语句的编译
            //5.处理查询结果集
            if (rs.next()){
                ok = true;
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return ok;
    }

    /**
     * 初始化界面,并接受用户的输入
     * @return  返回存储登录名和登录密码的Map集合
     */
    private static Map<String, String> initUI() {
        System.out.println("欢迎使用本系统,请用户输入用户名和密码进行身份认证!");
        Scanner s = new Scanner(System.in);
        System.out.print("用户名:");
        String loginName = s.nextLine();    //s.nextLine()是一次接收一行的输入
        System.out.print("密码:");
        String loginPwd = s.nextLine();

        //将上面输入的用户名和密码放到Map集合中
        Map<String,String> userLoginInfo = new HashMap<>();
        userLoginInfo.put("loginName",loginName);
        userLoginInfo.put("loginPwd",loginPwd);

        //返回Map集合
        return userLoginInfo;
    }
}

                                    

                                        属性配置文件db.properties在IDEA目录中所处的位置

                                         属性配置文件db.properties中的内容 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/heliuerya/article/details/128749331

sql注入现象-爱代码爱编程

sql注入现象: 1、先用一个程序引出sql注入现象: 例如:模拟用户登录业务。 测试代码: package sql_inject; import java.util.HashMap; import java.util.Map; import java.sql.*; import java.util.Scanner; public class T

如何避免SQL注入-爱代码爱编程

目录 什么是SQL注入解决方法 什么是SQL注入 现象: 账户名:xxx 密码:xxx ’ or ’ 1 ’ = ’ 1 登录成功 原因: 原执行sql: String sql = "select * from t_user where loginName = '"+loginName+"' and'"+loginP

JDBC学习——简单学习以及sql注入现象!-爱代码爱编程

  JDBC (java语言连接数据库)是sun公司制定的一套接口   JDBC 代码编写的六步  1、注册驱动  2、获取连接  3、获取数据库操作对象  4、执行sql语句  5、处理查询结果集  6、释放资源 1、注册驱动   有两种方式: //第一种 Driver driver=new com.mysql.jdbc.D

SQL注入现象_实例总结-爱代码爱编程

SQL注入——了解🐎? 本文主要内容:在通过使用基础的JDBC驱动连接数据库时,遇到的代码注入安全性问题。在初学的过程中大家会忽略的、值得注意的安全性问题做一个了解,同时总结学习去如何解决、避免这个基础的安全问题。 文章目录 SQL注入——了解🐎?前言一、SQ注入过程二、如何解决SQL注入总结 前言 SQL注入主要的概念 应

SQL注入现象及其解决方案-爱代码爱编程

一、SQL注入 1.1、SQL注入产生的原因 导致SQL注入的根本原团是:用户不是一般的用户, 用户是懂得程序的,输入的用户名信息以及密码信息中含有SQL语句的关键字,这个SQL语句的关键字和底层的SQL语句进行“字符串拼接”,导致原SQL语旬的含义被扭曲了。最最最主要的原因是:用户提供的信息参与了SQL语句的编译。根本原因:先进行了字符串拼接,然后再

JDBC学习(三) --------- SQL注入现象及解决方案-爱代码爱编程

目录 一、SQL注入现象演示二、解决方案三、Statement的用途 一、SQL注入现象演示 且看一份Java实现登录功能的代码,其中使用了JDBC连接了t_user表,如果输入的姓名和密码在此表中存在,则显示登录成功。反之,则显示登录失败。 import java.sql.*; import java.util.HashMap; impo

常见的SQL注入总结-爱代码爱编程

Sql字符注入与数字注入: 一.基本注入过程 查找注入点确认数据行数:用 order by(数字)的方法进行确认找显示位   如果有显示位用联合注入的方法进行注入 爆库:命令如下?id=-1 union select 1,2,database() --+查看使用账号:user() 查看数据库版本信息:vsersion() 爆表:命令如下?id=-

浅谈sql注入问题-爱代码爱编程

浅谈sql注入问题 在学习java的jdbc时学到这么一个东西,我们有时候会忽略这个问题,我们摘出来做一下简单的讨论。 Sql注入问题 及statement和PreparedStatement的区别: 首先我们来复习一下jdbc操作数据库的几个步骤: 注册驱动、获取连接、获取数据库操作对象,执行sql语句、处理查询结果集、释放资源 那么之前我们一

XSS与SQL注入-爱代码爱编程

XSS与SQL注入 1.实验目的 实验目的:了解什么是XSS;了解XSS攻击实施,理解防御XSS攻击的方法;了解SQL注入的基本原理;掌握PHP脚本访问MySQL数据库的基本方法;掌握程序设计中避免出现SQL注入漏洞的基本方法;掌握网站配置。 系统环境:Kali Linux 2、Windows Server 网络环境:交换网络结构 实验工具: Be

猫舍-sql注入-爱代码爱编程

漏洞地址 http://afsgr16-b1ferw.aqlab.cn/index.php?id=1 漏洞类型 Sql注入 漏洞描述及危害 sql注入是一种将sql代码插入或添加到应用用户的输入参数中,再将这些参数传递给后台的sql服务器加以解析并执行。Sql注入会导致数据库信息泄露,网页被篡改,数据库被恶意操作,服

sql注入_弥补之途的博客-爱代码爱编程

​​​原理         SQL注入就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。         SQL注入漏洞产生需要满足的条件:         (1)参数用户可控:前端传给后端的参数内容是用户可控的    

【sql注入攻击介绍】_韧雨之弥的博客-爱代码爱编程

目录 前言 本质和危害  分类 注入一般步骤 注入实战 前言   sql注入一直以来都稳居owasp-top10榜首,近年来更是爆出很多的数据库泄露攻击事件,如最近上海某公安存在数据库泄露事件。今天简单的分析以下sql注入的一些特性和方式:   owasp-top10 本质和危害    一、sql注入的危害包括但不局限于∶  

#jdbc_演示sql注入现象(解决sql注入现象)_qq_53239252的博客-爱代码爱编程

#JDBC_演示SQL注入现象(解决SQL注入现象) package com.snailxq.jdbc; import java.sql.*; import java.util.HashMap; import java.

#jdbc_解决sql注入现象(必须使用sql注入的需求)_qq_53239252的博客-爱代码爱编程

#JDBC_解决SQL注入现象(必须使用SQL注入的需求) package com.snailxq.jdbc; import java.sql.*; import java.util.Scanner; public c

ctf学习笔记——sql注入_苏柘_xtuer的博客-爱代码爱编程

SQL注入 sql注入的分类 1)可回显的注入 可以联合查询的注入 报错注入 通过注入进行DNS请求,从而达到可回显的目的 2)不可回显的注入 bool盲注 时间盲注 3)二次注入 通常作为一种业务逻辑较为复杂

模拟用户登录功能的实现以及演示sql注入现象_我为杰伦代言的博客-爱代码爱编程

模拟用户登录功能的实现以及演示SQL注入现象 /* 实现功能: 1、需求: 模拟用户登录功能的实现。 2、业务描述: 程序运行的时候,提供一个输入的入口,可以让用户输入用户名和密码 用户输入用户名和密码之后,提交信息,java程序收集到用户信息 Java程序连接数据库验证

jdbc模拟sql注入和避免sql注入_几分醉意.的博客-爱代码爱编程

模拟用户登录 用户名:fdsa 密码:fdsa’ or ‘1’='1 select * from t_user where login_name=‘fdsa’ and login_pwd=‘fdsa’ or ‘1’='1