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 ...
随机推荐
- Java获得当前日期是星期几
第一种方法: /** * 获取当前日期是星期几<br> * * @param date * @return 当前日期是星期几 */ public String ...
- vue - [04] 配置
关闭ESLint. 001 || ESLint (1)定义 ESLint是一个插件化的JavaScript代码检查工具.在vue项目中,它可以检查.vue文件中的JavaScript代码(包括脚本 ...
- Shell - [11] 开源Apache Zookeeper集群启停脚本
一.集群角色部署 当前有Zookeeper集群如下 主机名 ctos79-01 ctos79-02 ctos79-03 Zookeeper ○ ○ ○ 二.脚本使用 三.脚本内容 #!/bin/bas ...
- ABC391D题解
前置知识: map priority_queue 思路 考虑预处理每一个图块在第几秒后会被删除. 如何预处理?我使用了一种非常暴力的做法,首先处理的过程肯定是从下往上的,于是每一个图块能被删除一定是它 ...
- 在 Intel Ultra AI PC 设备上使用 OpenVINO™ C# API本地部署YOLOv11与YOLOv12
最新的英特尔 酷睿 Ultra 处理器(第二代)让我们能够在台式机.移动设备和边缘中实现大多数 AI 体验,将 AI 加速提升到新水平,在 AI 时代为边缘计算提供动力.英特尔 酷睿 Ultra ...
- 错误修正记录:synopsys license服务器激活报错-No valid hostids,exiting
长久没用vcs,此次新装design compiler,再次用到lmgrd,报错 (snpslmd)No valid hostids,exiting (snpslmd)EXITING DUE TO S ...
- 后台返回文件URL,前端下载文件,即使设置文件名,下载的文件名称并不是自己所设置的问题
1.背景 项目中遇到这么一个问题,上传文件后,后台返回的是一个URL,前端需要通过点击下载这个文件 2.首次处理 当时一看是下载文件,觉得很简单,无非是通过创建a标签来实现,以下是我当时的代码,用的是 ...
- 扩展知识:vscode配置easyx
扩展知识:vscode配置easyx 前言 因为个人用习惯了vscode,对于visual studio的操作只能说相当程度上很不适应,因此,我打算经历一番配置,让vscode可以配置上easyx ...
- kubectl port-forward bind: address already in use unable
前言 本地的 8080 映射到 Pod 的 80,kubectl 会把这个端口的所有数据都转发给集群内部的 Pod kubectl port-forward wp-pod 8080:80 & ...
- PX4 仿真环境开发整理
博客地址:https://www.cnblogs.com/zylyehuo/ (一)PX4 仿真开发 搭建仿真环境 概念介绍及环境建议 MAVROS安装(适用于ROS1.ROS2) Ubuntu安装Q ...