数据库访问接口的代码
数据库安全课程的老师要求我们写一个SQL注入攻击和防护的代码,看了一下课件,给出了一个部分的解决方案,希望大家多提意见。
关于SQL注入中可疑输入的过滤部分,在这里就不贴代码了,因为很简单,就是一个字符串的匹配问题。关于这个接口,有如下说明:
1.该接口的编写基于以下两条防SQL注入的规则:
(1)避免使用字符串拼接的方法来构造sql语句。
(2)为不同类型的sql操作设置不同的权限。
代码如下:
package zhanglei.SQLInjection;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class DBHelper {
private Connection conn; //这里把sql相关的类都做成了DBConn的属性
private static String driverName;
private static String path;
private static Properties prop;
private int rank;
static{
getConfigOfDB();
}
/**
/*构造函数,提供的参数为当前sql操作的安全级别,对应数据库中不同权限的用户。具体的用户信息在db.config文件中进行配置
public DBHelper(int rank){
this.rank=rank;
try {
Class.forName(driverName).newInstance();
conn = DriverManager.getConnection(path,getUP(rank,1), getUP(rank,2));//1表示取出用户名,2表示取出密码
} catch (SQLException e) {
System.out.println("Connect database failed");
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
private static void initConfigFile(){
prop = new Properties();
try
{
FileInputStream in = new FileInputStream("E:""db.config");
prop.load(in);
in.close();
}
catch(Exception e)
{
System.out.print(e.getMessage());
}
}
private static void getConfigOfDB() {
initConfigFile();
driverName=prop.getProperty("driverName");
path=prop.getProperty("path");
prop.clear();
}
private static String getUP(int rank,int tag){
if(prop==null)initConfigFile();
if(tag==1)return prop.getProperty("name"+rank);
else return prop.getProperty("password"+rank);
}
/**
/*执行查询,要求rank大于等于5,才能进行相应的操作,
/*提供的第一个参数预编译的sql语句,第二个参数是字符串数组(此处为了简化,假定所有的字段都是字符型的)
public ResultSet executeSql(String preparedSql,String... strArray){
ResultSet rs=null;
int i=0;
if(rank<5)return null;
else{
try {
PreparedStatement psmt=conn.prepareStatement(preparedSql);
for(String str:strArray){
i++;
psmt.setString(i, str);
}
rs=psmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
}
}
转载于:https://www.cnblogs.com/zhangleispirit/archive/2008/10/15/1312098.html
数据库访问接口的代码相关推荐
- 3、常用数据库访问接口简介
不同的程序设计语言会有各自不同的数据库访问接口,程序语言通过这些接口,执行 SQL 语句,进行数据库管理.主要的数据库访问接口主要有 ODBC.JDBC.ADO.NET 和 PDO. ODBC ODB ...
- mysql的ole db 访问接口msdasql的数据源对象_数据库访问接口(ODBC,OLEDB,ADO)
目录 数据库访问接口发展历史 ODBC历史 ODBC(Open Database Connectivity,开放数据库互连).要了解ODBC是什么,先了解一下数据库连接的相关知识.在最开始连接数据库时 ...
- mysql 接口访问_MySQL的数据库访问接口-阿里云开发者社区
大部分流行的关系数据库产品采用的都是 C/S 架构.因此,应用程序要访问数据库的数据就必须和各种数据库客户端(也称为数据库访问接口)打交道.可以这么认为,每一种流行的编程语言都需要一个对应的数据库访问 ...
- SQLAPI数据库访问接口访问MySQL数据库
SQLAPI是一种比较方便的数据库访问接口组件,可以支持多种数据库接口的访问,详细信息可以访问www.sqlapi.com,有详细介绍.本文介绍的是在MFC中通过SQLAPI接口访问MySQL数据库的 ...
- SpringCloud-使用路由网关统一访问接口(附代码下载)
场景 SpringCloud-使用熔断器仪表盘监控熔断: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102673599 Spr ...
- [Java 基础]-- java提供的访问数据库的接口(jdbc)
JDBC java提供的一套访问数据库接口 java--->操作数据库 JDBC发展历史:[了解] TYPE1:JDBC--odbc桥:间接访问数据库//odbc是c语言的jdbc TYPE2: ...
- AliasDB:简单统一灵活的数据库访问库(支持MSSQL/MySQL/SQLite/Oracle/ODBC/OleDb)适用于中小型系统...
数据库访问各种规模的应用程序不可避免的操作,.NET对提供了简单方便统一的数据库访问类,并且通过Enterprise Lib提供了更为顶层的数据库访问库.在我的人个工作中,现在用得最多的就是通过&qu ...
- ruby mysql dbi_Ruby/DBI-数据库访问接口
Ruby/DBI 是一个跟 Perl/DBI 类似的统一数据库访问接口,支持各种流行的数据库. 下面是一段使用了 Ruby/DBI 的代码: #!/usr/bin/ruby -w # simple.r ...
- VB.NET学习笔记:ADO.NET操作ACCESS数据库——ADO.NET数据访问接口
一.ADO.NET概述 Ado.net基于XML和离线计算模型. ADO.net的两个核心组件:.Net数据提供程序.DataSet. .net数据提供程序用来与数据库的连接,如SQLServer.n ...
最新文章
- 是同步方法还是 synchronized 代码?-- 详解多线程同步规则
- Cocos2d 游戏状态机
- 分享:SringBuffer与String的区别
- 设计模式复习-中介者模式
- python dlib学习(八):训练人脸特征点检测器
- 无法绑定由多个部分组成的标识符“System.Data.DataRowView”
- vs为什么打了断点不断_为什么西餐厅里的牛排又嫩又多汁?原来大厨都做了“这一步”...
- 每天一道LeetCode-----将有序序列转成高度平衡二叉搜索树
- f12 卡 谷歌浏览器_抢券第二课:利用浏览器F12获取优惠券请求链接
- 【C语言】通过原子操作实现加减乘除功能Ⅰ
- 网络操作系统第1章习题
- Java面试之锁-自旋锁
- mysql随机显示记录_mysql随机提取记录数的方法
- Android Bitmap 加载与像素操作
- JMeter基础教程1:若隐若现的参数化
- 四大逆向工程软件简介
- 如何让双十一数据大屏讲出故事?设计有口诀
- 编写matlab语句计算试题,MATLAB测验考试题
- w10计算机无法打印,win10提示“无法打印 似乎未安装打印机”怎么办
- 抖音直播间怎样避免被封禁,直播间行为规范必看:国仁楠哥
热门文章
- 百度api 一直提示token错误_phpcms小程序插件小程序万能接口api(支持微信、百度)...
- xssfsheet removerow 剩下空白行怎么处理_糟糕!开瓶时酒塞不小心掉进酒里该怎么处理?...
- postman生成python代码_python代码直接生成可执行exe文件
- python行数据切片_通过切片访问DataFrame行
- Pandas Timedelta对象
- oracle使用连接池,使用Oracle的数据连接池
- “吸才”的字节跳动和“散才”的好未来
- Java基础学习总结(167)——Java项目实践中如何实现幂等
- Redis学习总结(4)——Spring Data操作Redis
- Tomcat学习总结(14)—— Tomcat常见面试题