什么是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会造成表数据 ...
随机推荐
- DrawIO安装及基本使用教程
1.DrawIO简介 DrawIO 是一款开源免费且功能强大的绘图工具,可以用于绘制流程图.组织结构图.网络图.UML图等各种类型的图表: DrawIO 支持多种文件格式,包括XML.PNG.SVG等 ...
- 【Windows】开放共享目录
在项目里面做数据迁移时发现,WindowsServer的多个主机可以进行磁盘共享访问 但是自己设置是灰白无法点击的 文件目录共享还是可以进行设置的 1.找到自己需要共享的目录,右键选择[属性],并找到 ...
- 【Zookeeper】03 单机操作
访问Zookeeper 开启Zookeeper服务程序: ./zkServer.sh start 启动Zookeeper客户端进行访问: ./zkCli.sh 运行打印: [root@VM-0-7-c ...
- 【Shiro】07 散列算法 & 凭证配置
[散列算法概述] 用于生成数据的摘要信息,不可逆算法,用于存储密码或者密文数据. 常见散列算法类型:MD5.SHA 一般进行散列时提供一个"盐",即系统知道的"干扰数据& ...
- reinforcement learning常用的游戏环境,gym框架使用的标准Atari游戏集合
reinforcement learning常用的游戏环境,gym框架使用的标准Atari游戏集合.*.bin文件为Atari2600游戏的常用游戏环境的模拟文件,也称为roms文件. 文件地址: h ...
- vim跳转到上次和下次光标位置
在vim的命令模式下: ctrl + i 下次光标位置; ctrl + o 上次光标位置. =====================================
- springboot实现事务管理
Springboot实现事务步骤1.在启动类加上@EnableTransactionManagement 2.在业务层方法上加 @Transactional(rollbackFor = Excepti ...
- [CEOI 2013] 千岛之国 / Adritic 题解
前言 题目链接:洛谷. 题意简述 你被困在一个被划分为 \(2500 \times 2500\) 的二维平面内!平面上有 \(n\)(\(n \leq 250000\))个岛屿你可以停留,你可以在这些 ...
- typeof、offsetof、container_of
typeof 用于获取一个对象的类型,比如: unsigned int a = 1; // typeof (a) is unsigned int short b = 2; // typeof (b ...
- 什么是ARM中的SP(堆栈)和LR?
LR是用于保存函数调用的返回地址的link register. SP是堆栈指针.堆栈通常用于在函数调用中保存"automatic"变量和上下文/参数.从概念上讲,您可以将" ...