SQL注入现象

news/2024/11/20 7:29:45/
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.执行SQLString 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中的内容 


http://www.ppmy.cn/news/18791.html

相关文章

PHP SimpleXML

PHP SimpleXML 处理最普通的 XML 任务&#xff0c;其余的任务则交由其它扩展处理。 什么是 PHP SimpleXML&#xff1f; SimpleXML 是 PHP 5 中的新特性。 SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。 与 DOM 或 Expat 解析器相比&#xff0c;SimpleXML …

第54章 SQL HAVING 子句教程

HAVING 子句 在 SQL 中增加 HAVING 子句原因是&#xff0c;WHERE 关键字无法与聚合函数一起使用。 HAVING 子句可以让咱们筛选分组后的各组数据。 SQL HAVING 语法 SQL HAVING 语法 SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name o…

关于MVC/MVP/MVVM的一些错误认识

在 Android 开发中使用 MVP 和 MVVM 模式早已不是新鲜事了&#xff0c;各种 MVP/MVVM 相关的文章、开源库也已屡见不鲜&#xff0c;甚至是让人眼花撩乱&#xff0c;那么我为什么还要在这个早已被画满涂鸦的黑板上再来涂涂画画呢&#xff1f;是想彰显我的存在感吗&#xff1f;那…

linux系统中利用QT实现语音识别项目的操作方法

大家好&#xff0c;今天主要和大家分享一下&#xff0c;如何使用linux系统上的语音识别项目的操作方法与实现。 目录 第一&#xff1a;语音识别基本简介 第二&#xff1a;语音识别产品申请账号 第三&#xff1a;具体代码实现 第一&#xff1a;语音识别基本简介 AI音箱对传统…

2、Three.js开发入门与调试设置

一、添加坐标轴辅助器 AxesHelper 用于简单模拟3个坐标轴的对象. 红色代表 X 轴. 绿色代表 Y 轴. 蓝色代表 Z 轴. 构造函数 AxesHelper( size : Number ) size -- (可选的) 表示代表轴的线段长度. 默认为 1. //添加坐标轴 const axesHelper new THREE.AxesHelper(5); sc…

微服务框架需要处理哪些问题?

文章目录简述架构选择统一版本管理基础框架包管理业务框架包管理模型分层全局上下文管理数据结构定义上下文的传播前后端数据格式协定统一数据格式字段规范协定异常处理orm配置公共字段处理分页处理字段加解密缓存key的序列化哪些数据进行缓存消息队列key的规范队列的管理注册中…

零信任-发展历程及概念(1)

零信任发展历程 2010 Forrester约翰金德维格正式提出零信任概念 2013 CSA成立软件定义边界SDP工作组,次年发布SDP标准规范1.0 2017 Gartner正式提出“CARTA”零信任模型 2018 Forrester发表零信任扩展模型ZTX 2019 Gartner发布零信任网络&#xff08;ZTNA&#xff09;云安…

数据结构进阶 哈希桶

作者&#xff1a;小萌新 专栏&#xff1a;数据结构进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;模拟实现高阶数据结构 哈希桶 哈希桶哈希冲突的另一种解决方法开散列 -- 链地址法举例哈希表的开散列实现 --哈希桶哈希表的结构…