当前位置:网站首页>Preparedstatement prevents SQL injection
Preparedstatement prevents SQL injection
2022-04-23 06:00:00 【hanyc..】
Add data :
package com.hyc.study03;
import com.hyc.study02.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TestInsert {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//3、 Get database connection
connection = JDBCUtils.getConnection();
// Use ? Placeholders replace parameters
String sql = "INSERT INTO `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) " +
"VALUES (?,?,?,?,?);";
//4、 Access to perform sql The object of
// precompile sql, First write sql, Then don't execute
preparedStatement = connection.prepareStatement(sql);
// Assign parameters manually
preparedStatement.setInt(1, 4);
preparedStatement.setString(2, "hyc");
preparedStatement.setString(3, "123456");
preparedStatement.setString(4, "[email protected]");
//java.sql.Date It's database Date , Only the date information is included , It is java.util.Date( Contains the information of month, day, hour, minute and second ) Subclasses of
preparedStatement.setDate(5, new java.sql.Date(new Date().getTime()));
//5、 perform sql sentence
//6、 Return execution result set
int num = preparedStatement.executeUpdate();
if (num > 0) {
System.out.println(" Insert data succeeded !");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
//7、 Release the connection
JDBCUtils.release(connection, preparedStatement, resultSet);
}
}
}
Delete data :
package com.hyc.study03;
import com.hyc.study02.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestDelete {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//3、 Get database connection
connection = JDBCUtils.getConnection();
// Use ? Placeholders replace parameters
String sql = "DELETE FROM `users` WHERE id=?";
//4、 Access to perform sql The object of
// precompile
preparedStatement = connection.prepareStatement(sql);
// Assign parameters manually
preparedStatement.setInt(1, 4);
//5、 perform sql sentence
//6、 Return execution result set
int num = preparedStatement.executeUpdate();
if (num > 0) {
System.out.println(" Delete data succeeded !");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
//7、 Release the connection
JDBCUtils.release(connection, preparedStatement, resultSet);
}
}
}
Modifying data :
package com.hyc.study03;
import com.hyc.study02.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestUpdate {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//3、 Get database connection
connection = JDBCUtils.getConnection();
// Use ? Placeholders replace parameters
String sql = "UPDATE `users` SET `NAME`=?,`email`=? WHERE `id`=?";
//4、 Access to perform sql The object of
// precompile
preparedStatement = connection.prepareStatement(sql);
// Assign parameters manually
preparedStatement.setString(1, "zhangsan");
preparedStatement.setString(2, "[email protected]");
preparedStatement.setInt(3, 1);
//5、 perform sql sentence
//6、 Return execution result set
int num = preparedStatement.executeUpdate();
if (num > 0) {
System.out.println(" Update data successful !");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
//7、 Release the connection
JDBCUtils.release(connection, preparedStatement, resultSet);
}
}
}
Query data :
package com.hyc.study03;
import com.hyc.study02.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestSelect {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//3、 Get database connection
connection = JDBCUtils.getConnection();
// Use ? Placeholders replace parameters
String sql = "SELECT * FROM `users` WHERE id=?";
//4、 Access to perform sql The object of
// precompile
preparedStatement = connection.prepareStatement(sql);
// Assign parameters manually
preparedStatement.setInt(1, 1);
//5、 perform sql sentence
//6、 Return execution result set
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("NAME"));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
//7、 Release the connection
JDBCUtils.release(connection, preparedStatement, resultSet);
}
}
}
PreparedStatement prevent SQL Inject :
PreparedStatement prevent SQL The essence of injection is to treat the parameters passed in as characters ( I want to wrap the passed parameters into a new string ), If there are escape characters , for example ‘ Will be escaped directly . This can avoid string splicing into illegal sql sentence , Cause data leakage .
package com.hyc.study03;
import com.hyc.study02.utils.JDBCUtils;
import java.sql.*;
public class PourIntoSql {
public static void main(String[] args) {
login("'' or '1=1", "123456");
}
public static void login(String username, String psw) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = JDBCUtils.getConnection();
String sql = "SELECT * FROM `users` WHERE `NAME`=? AND `PASSWORD`=?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, username);
preparedStatement.setString(2, psw);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("NAME"));
System.out.println("===========================================");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtils.release(connection, preparedStatement, resultSet);
}
}
}
result :

stay PreparedStatement Under the influence of , Then try to achieve... Through string splicing SQL The purpose of injection cannot be achieved .
版权声明
本文为[hanyc..]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230541159555.html
边栏推荐
- Anaconda
- Pytorch学习记录(三):神经网络的结构+使用Sequential、Module定义模型
- RedHat realizes keyword search in specific text types under the directory and keyword search under VIM mode
- Font shape `OMX/cmex/m/n‘ in size <10.53937> not available (Font) size <10.95> substituted.
- Font shape `OMX/cmex/m/n‘ in size <10.53937> not available (Font) size <10.95> substituted.
- Conda 虚拟环境管理(创建、删除、克隆、重命名、导出和导入)
- delete和truncate
- Development environment EAS login license modification
- 解决报错:ImportError: IProgress not found. Please update jupyter and ipywidgets
- Manually delete registered services on Eureka
猜你喜欢

创建二叉树

Paper on LDCT image reconstruction: edge enhancement based transformer for medical image denoising

PyEMD安装及简单使用

In depth understanding of the relationship between dncblevel and noise denoising in the paper

Latex quick start

Development environment EAS login license modification

JDBC连接数据库

线性代数第三章-矩阵的初等变换与线性方程组

你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问

容器
随机推荐
JVM family (4) -- memory overflow (OOM)
线代第四章-向量组的线性相关
Pytorch学习记录(十):数据预处理+Batch Normalization批处理(BN)
Pytorch学习记录(十三):循环神经网络((Recurrent Neural Network)
深入源码分析Servlet第一个程序
PyEMD安装及简单使用
常用编程记录——parser = argparse.ArgumentParser()
How to use comparative learning to do unsupervised - [cvpr22] training & [eccv20] image translation
数字图像处理基础(冈萨雷斯)一
PyQy5学习(四):QAbstractButton+QRadioButton+QCheckBox
Gaussian processes of sklearn
Linear algebra Chapter 2 - matrices and their operations
Chapter 3 of linear algebra - Elementary Transformation of matrix and system of linear equations
Reading of denoising paper - [ridnet, iccv19] real image denoising with feature attention
redhat实现目录下特定文本类型内关键字查找及vim模式下关键字查找
数字图像处理基础(冈萨雷斯)二:灰度变换与空间滤波
线性代数第二章-矩阵及其运算
PyTorch笔记——实现线性回归完整代码&手动或自动计算梯度代码对比
治疗TensorFlow后遗症——简单例子记录torch.utils.data.dataset.Dataset重写时的图片维度问题
PyTorch笔记——观察DataLoader&用torch构建LeNet处理CIFAR-10完整代码