什么是SQL注入并解决
' or ' 1 ' = ' 1
原理:通过违规的字符串改变原来的SQL语句 ;【将敏感字符进行转义】
// 包名
package com.zhulx.JDBC; // 导入实例类 import com.zhulx.pojo.Account; import java.sql.*;
import java.util.ArrayList;
import java.util.List; /**
* JDBC 快速入门
* **/
public class JDBC03 {
// throws Exception 说明此方法不会处理异常
public static void main(String[] args) throws Exception {
// TODO 用户登录逻辑判断
// 用户登录
// 2. 获取连接 【 就是关联数据库 】 访问 test 数据库
String url = "jdbc:mysql://127.0.0.1:3306/tb_user";
String username = "root";
String password = "abc123";
Connection conn = DriverManager.getConnection(url, username, password);
// 前端用户输入的用户名和密码
// 单引号是字符 双引号是字符串
String name = "zhulongxu";
String pwd = "123456";
name = "dasfjalhsdf";
pwd = "' or ' 1 ' = ' 1 "; // 3. 定义 sql DQL
// String sql = "select * from user_table where username='"+name+"' and password = '"+pwd+"'";
// 3. prepareStatment定义 SQL 语句的写法
String sql = "select * from user_table where username = ? and password = ?"; // 4. 获取执行 sql 对象 statement
// Statement stmt = conn.createStatement() ;
// 4. prepareStatment 获取 pstmt 对象
PreparedStatement pstmt = conn.prepareStatement(sql); // 5. 设置 ? 的值 1 2 都是参数索引, 1 表示第一个 ?
// 原来 ' or ' 1 ' = ' 1 的字符串通过 prepareStatement 把单引号转义了 ‘/’ 就不再是违法的字符串了【‘】
pstmt.setString(1, name);
pstmt.setString(2,pwd);
// SQL 注入原理:就是通过字符串的拼接和关键字符串把原本的SQL语句给改变了
// prepareStatement 的作用:避免SQL注入攻击 // 5. 执行 sql 【返回值是受影响的行数】
// ResultSet rs = stmt.executeQuery(sql);
// 5. preparestatement 执行 sql
ResultSet rs = pstmt.executeQuery(); // 6. 判断是否登录成功 如果在数据库找到了这个用户说明登录成功 rs.next() 是否获取到了数据
// // System.out.println(rs.next()); // true
if(rs.next()) {
System.out.println(name);
System.out.println(pwd);
System.out.println(sql);
System.out.println("登录成功");
}else {
System.out.println(name);
System.out.println(pwd);
System.out.println("登录失败");
} // 7. 释放资源
pstmt.close();
conn.close();
rs.close();
}
}
什么是SQL注入并解决的更多相关文章
- SQL注入漏洞解决方法
本文只指针编码层次的SQL注入漏洞解决方法,例子代码是以java为主. 1,参数化的预编译查询语句 不安全例子 String query = "SELECT account_balance ...
- sql 注入 与解决
package cn.itcast.jdbc; import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLExce ...
- Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法
sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...
- Java学习笔记47(JDBC、SQL注入攻击原理以及解决)
JDBC:java的数据库连接 JDBC本质是一套API,由开发公司定义的类和接口 这里使用mysql驱动,是一套类库,实现了接口 驱动程序类库,实现接口重写方法,由驱动程序操作数据库 JDBC操作步 ...
- JDBC的使用和SQL注入问题
基本的JDBC使用: package demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql. ...
- 【JDBC】学习路径3-密码登录&SQL注入攻击
最后再提醒一句,每次在测试JDBC程序的时候,一定要确保MySQL正在运行. 打开控制台(终端),输入mysql 如果没启动,则出现以下提示: Mac端启动MySQL数据库,需要在系统便好设置中启动. ...
- IBatis.Net使用总结(一)-- IBatis解决SQL注入(#与$的区别)
IBatis解决SQL注入(#与$的区别) 在IBatis中,我们使用SqlMap进行Sql查询时,需要引用参数,在参数引用中可以使用两种占位符#和$.这两种占位符有什么区别呢? (1):#***#, ...
- PreparedStatement解决sql注入问题
总结 PreparedStatement解决sql注入问题 :sql中使用?做占位符 2.得到PreparedStatement对象 PreparedStatement pst=conn.prepar ...
- 使用过滤器解决SQL注入和跨站点脚本编制
1 SQL注入.盲注 1.1 SQL注入.盲注概述 Web 应用程序通常在后端使用数据库,以与企业数据仓库交互.查询数据库事实上的标准语言是 SQL(各大数据库供应商都有自己的不同版本).Web 应用 ...
- PDO(PHP Data Object),Mysqli,以及对sql注入等问题的解决
这篇是上一篇 http://www.cnblogs.com/charlesblc/p/5987951.html 的续集. 看有的文章提到mysqli和PDO都支持多重查询,所以下面的url会造成表数据 ...
随机推荐
- 图书《数据资产管理核心技术与应用》核心章节节选-3.1.2. 从Spark 执行计划中获取数据血缘
本文节选自清华大学出版社出版的图书<数据资产管理核心技术与应用>,作者为张永清等著. 从Spark 执行计划中获取数据血缘 因为数据处理任务会涉及到数据的转换和处理,所以从数据任务中解析血 ...
- 【微信小程序】 侧边栏菜单查询
原因 开发的项目在WX小程序上有个新需求 就是在用户[我的]界面里的菜单中多加一个[我的服务] 之前有提及过,服务消息被按8个消息类型拆成了8张表 对应,在小程序界面这里也应该放上对应8个菜单,按菜单 ...
- 【Project】JS的Map对象前后交互问题
这是我在项目中写的一个Map对象: let map = new Map(); for (let i = 0; i < type_checked_value.length; i++) { let ...
- 【Docker】01 概述
什么是Docker? 一个开源的应用容器引擎 由Go语言开发而成,遵循Apache2.0开源协议 允许开发者打包自己的应用或者依赖包组件到一个轻量级可移植的容器中 Docker容器采用沙箱机制,相互之 ...
- 读论文《Distilling the Knowledge in a Neural Network》——蒸馏网络 —— 蒸馏算法 —— 知识蒸馏 中的温度系数到底怎么用, temperature怎么用?
论文地址: https://arxiv.org/pdf/1503.02531.pdf 蒸馏网络的重要公式: 其中,\(p^g\)为Teacher网络,\(q\)为Student网络. 个体神经网络(C ...
- 《Python数据可视化之matplotlib实践》 源码 第二篇 精进 第六章
图 6.1 import matplotlib.pyplot as plt import numpy as np x=np.linspace(-2*np.pi, 2*np.pi, 200) y=np. ...
- @ComponentScan
@ComponentScan 是一个注解,用于Spring框架,它允许开发者指定Spring应该扫描哪个包或包下的子包来寻找组件(如@Component.@Service.@Repository等注解 ...
- MPTCP(三) : 在内核中启用MPTCP相关模块
在内核中启用MPTCPv1相关的模块 1. 简介 本文所涉及的均为MPTCPv1版本的MPTCP,采用的内核版本为5.18.19 需要注意的是 虽然MPTCP官方文档中提到在5.6之后的linux内核 ...
- 「TCP/UDP」一个端口号可以同时被两个进程绑定吗?
一.1个端口号可以同时被两个进程绑定吗? 根据端口号的绑定我们分以下几种情况来讨论: 2个进程分别建立TCP server,使用同一个端口号8888 2个进程分别建立UDP server,使用同一个端 ...
- redis-cli命令行工具使用
redis 6.2.8 1.连接 ./redis-cli -h 127.0.0.1 -p 6379 -a admin@2020 -h redis主机地址 -a redis密码 -p redis端口 2 ...