什么是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会造成表数据 ...
随机推荐
- 【FastDFS】05 Java程序测试上传
创建普通Maven工程 导入所需依赖坐标: <dependencies> <!-- https://mvnrepository.com/artifact/net.oschina.zc ...
- 【转载】sun的rpc ——rpcbind(nfs文件系统中的rpc)
原文地址: https://blog.csdn.net/wangpeng138375/article/details/8169071 ================================= ...
- linux终端alacritty导致计算机死机的解决方式——Ubuntu18.04系统Nvidia显卡
如题所述,近日在自己Ubuntu18.04的系统上安装了alacritty终端,安装这个终端主要原因就是可以出现透明桌面,说白了就是漂亮,beautiful,但是这个终端安装后系统就变得极不稳定,经常 ...
- SMU Summer 2023 Contest Round 9(2019 山东省大学生程序设计竞赛)
2019 山东省大学生程序设计竞赛 A. Calandar 纯模拟吧(感觉我做麻烦了(?), 就是如果问的是未来的日期,就用相隔天数取模后加上这天的星期, 如果问的是曾经的,就用这天的星期减去相隔天数 ...
- python分布式事务方案(一)tcc
python分布式事务方案(一)tcc 随着单体应用的拆分以及服务化的流行,现在分布式事务已经比较常见,分布式事务理论ACID.CAP.BASE等我就不说了,现在就直接说一下一种常见的解决方案-tcc ...
- 减小code体积的书写习惯
1. 减少使用switch 2. 函数内部尽量使用内部变量,减少使用全局变量的次数 void func(void){ uint32_t sysclk; ... // 其他代码 rccClocks.SY ...
- Notes for uc/OS-III User Guide
1. Architecture F2-1(1) The application code consists of project or product files. For convenience, ...
- 【问答23】Linux移植:如何制作rootfs?
粉丝问题 如何制作rootfs? 安排! 想直奔主题的,直接跳到第四章. 一.分析 1. 文件系统简介 理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的,文件系 ...
- 使用分布式锁解决IM聊天数据重复插入的问题
导航 业务背景 问题分析与定位 探索可行的解决方案 数据库层面处理--唯一索引 应用程序层面处理--分布式锁 分布式锁概述 分布式锁需要具备哪些特性? 分布式锁有哪些实现方式? 基于数据库的实现方式 ...
- Win32 插入符光标跟随的打字小程序
1.先创建插入符光标 在WM_CREATE消息中 LRESULT OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam) { HDC hdc = GetDC ...