sql注入与防止sql注入
数据库中的数据
sql代码
package com.zjw.jdbc2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
/*
* sql注入
*/
public class SqlInject
{
public static void main(String[] args)
{
try
{
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/aaa?useSSL=false&serverTimezone=UTC";
String user = "root" ;
String password = "123456";
//获取连接
Connection con = DriverManager.getConnection(url, user, password);
Statement stat = con.createStatement();
//输入用户名和密码
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
String inName = sc.nextLine();
String inPass = sc.nextLine();
//查询数据库
String sql = "SELECT * FROM category WHERE sid = '"+inName+"' AND sname = '"+inPass+"';";
System.out.println(sql);
//结果处理
ResultSet res = stat.executeQuery(sql);
while(res.next())
{
String sid = res.getString("sid");
String sname = res.getString("sname");
System.out.println(sid+" "+sname);
}
//释放资源
res.close();
stat.close();
con.close();
} catch (ClassNotFoundException | SQLException e)
{
e.printStackTrace();
}
}
}
结果:
防止sql注入代码:
package com.zjw.jdbc2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
/*
* 防止sql注入
*/
public class SqlInject2
{
public static void main(String[] args)
{
try
{
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/aaa?useSSL=false&serverTimezone=UTC";
String user = "root" ;
String password = "123456";
//获取连接
Connection con = DriverManager.getConnection(url, user, password);
//输入用户名和密码
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
String inName = sc.nextLine();
String inPass = sc.nextLine();
//查询数据库
String sql = "SELECT * FROM category WHERE sid = ? AND sname = ? ;";
PreparedStatement pst = con.prepareStatement(sql);//PreparedStatement为Satetment的子接口
pst.setString(1, inName);//设置参数
pst.setString(2, inPass);
//结果处理
ResultSet res = pst.executeQuery();//调用方法不用加sql
while(res.next())
{
String sid = res.getString("sid");
String sname = res.getString("sname");
System.out.println(sid+" "+sname);
}
//释放资源
res.close();
pst.close();
con.close();
} catch (ClassNotFoundException | SQLException e)
{
e.printStackTrace();
}
}
}
结果:
正常输入数据
异常输入数据
sql注入与防止sql注入的更多相关文章
- SQL中批量删除被注入的恶意代码的方法
下文将为您介绍SQL中批量删除被注入的恶意代码的方法,供您参考,如果您也遇到了这样的问题,不妨一看,相信对您会有所帮助. 1,如果你的数据表很少的话,那么写几条简单的sql就搞定了 对于表中的nvch ...
- [SQL SERVER系列]读书笔记之SQL注入漏洞和SQL调优
最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“'1'='1'”这个表达式永远返回 true, ...
- 使用sqlmap注入DVWA的SQL Injection菜单
1 使用sqlmap注入DVWA的SQL Injection菜单 本教程中的登陆地址:http://192.168.0.112/dvwa/login.php 1.1 获取cookie信息 1) 使用a ...
- 『SQL注入』 User-Agent 手工注入的探测与利用分析
原理很简单:后台在接收UA时没有对UA做过滤,也没有PDO进行数据交互(实际PDO是非常有必要的),导致UA中有恶意代码,最终在数据库中执行. Bug 代码: 本地顺手打了一个环境,Bug 代码部分: ...
- 读书笔记之SQL注入漏洞和SQL调优
原文:读书笔记之SQL注入漏洞和SQL调优 最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“' ...
- SQL注入漏洞和SQL调优SQL注入漏洞和SQL调优
SQL注入漏洞和SQL调优 最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“'1'='1'”这 ...
- 【sql注入教程】SQL注入是什么?我们如何去玩转它
[sql注入教程]SQL注入是什么?我们如何去玩转它 本文转自:i春秋社区 SQL注入攻击是黑客攻击数据库最常见手段之一.简单讲,SQL注入攻击是黑客利用网站程序漏洞,通过提交精心构造的SQL语句 ...
- 【sql注入】浅谈sql注入中的Post注入
[sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...
- sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)
(整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...
- 注入学习1:SQL注入语句大全
学习背景 之前做了xss预防,以及些许的注入预防了,但是不够全面,如果还是搜集了下一些常用的注入手段,以此用来进行更好的预防. 什么是注入 一般来说,SQL注入一般存在于形如:HTTP://xxx.x ...
随机推荐
- druid 连接池参数说明
一.参数配置说明 属性 说明 建议值 url 数据库的jdbc连接地址.一般为连接oracle/mysql.示例如下: mysql : jdbc:mysql://ip:port/dbname? ...
- QT5笔记:11. Qt类库的模块
基础模块:提供了Qt的最基本的功能 附加模块:实现了一些特定功能的提供了附加价值的模块 增值模块:商业版才有的模块,单独发布的提供额外附加价值的模块或工具 技术预览模块:一些处于开发阶段,但是可以作为 ...
- 解决Typecho文章cid不连续的教程
Typecho下文章编号(cid)不连续,虽然不影响什么,也无关紧要,但是对于有强迫症的人(比如我)来说,真的是无法忍受.还好有大佬提供了解决办法. 将以下代码保存为php文件,上传至网站根目录,在浏 ...
- docker - [16] Swarm集群搭建
以下是购买的阿里云服务器ECS的四个实例,确保四台服务器互相可以ping通. 一.环境准备(安装docker) (1)安装gcc相关环境(在四台服务器上) yum -y install gcc yum ...
- Flink学习(九) Sink到Kafka
package com.wyh.streamingApi.sink import java.util.Properties import org.apache.flink.api.common.ser ...
- PHP中处理html相关函数集锦
1.html_entity_decode() 函数把 HTML 实体转换为字符. Html_entity_decode() 是 htmlentities() 的反函数. 例子: <?Php $s ...
- 记vue修改数组属性,dom不发生变化的问题
目录: 目录 目录: 开篇 正确的姿势 为什么 $set 开篇 今天在写vue的时候,出现了一个以前可能没遇到的问题.我利用一个数组记录列表下按钮的启用.禁用状态,但我点击某个列表项按钮后,会修改当前 ...
- KTransformer实战DeepSeek-R1-1.58bit量化模型
技术背景 在上一篇文章中,我们介绍过KTransformers大模型高性能加载工具的安装和使用方法.但是当时因为是在一个比较老旧的硬件上面进行测试,其实并没有真正的运行起来.现在补一个在KTransf ...
- 想查看某些网站源码,结果发现网站F12被禁用,怎么解决?
当我们访问某些网站的时候,发现网站是禁用了F12和右键功能的.比如想保存网页上的一些文字或图片等, 新手不知道怎么破除. 下面分享给大家几种方法:1.打开网页后,鼠标点进浏览器地址栏,再按F12键,就 ...
- PVE虚拟平台常用简明操作,三分钟搞定虚拟机更换安装配置
Proxmox Virtual Environment是一个基于QEMU/KVM和LXC的开源服务器虚拟化管理解决方案,本文简称PVE,与之相类似的虚拟化平台是VMWARE的ESXi虚拟平台,相较于商 ...