数据库安全课程的老师要求我们写一个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

数据库访问接口的代码相关推荐

  1. 3、常用数据库访问接口简介

    不同的程序设计语言会有各自不同的数据库访问接口,程序语言通过这些接口,执行 SQL 语句,进行数据库管理.主要的数据库访问接口主要有 ODBC.JDBC.ADO.NET 和 PDO. ODBC ODB ...

  2. mysql的ole db 访问接口msdasql的数据源对象_数据库访问接口(ODBC,OLEDB,ADO)

    目录 数据库访问接口发展历史 ODBC历史 ODBC(Open Database Connectivity,开放数据库互连).要了解ODBC是什么,先了解一下数据库连接的相关知识.在最开始连接数据库时 ...

  3. mysql 接口访问_MySQL的数据库访问接口-阿里云开发者社区

    大部分流行的关系数据库产品采用的都是 C/S 架构.因此,应用程序要访问数据库的数据就必须和各种数据库客户端(也称为数据库访问接口)打交道.可以这么认为,每一种流行的编程语言都需要一个对应的数据库访问 ...

  4. SQLAPI数据库访问接口访问MySQL数据库

    SQLAPI是一种比较方便的数据库访问接口组件,可以支持多种数据库接口的访问,详细信息可以访问www.sqlapi.com,有详细介绍.本文介绍的是在MFC中通过SQLAPI接口访问MySQL数据库的 ...

  5. SpringCloud-使用路由网关统一访问接口(附代码下载)

    场景 SpringCloud-使用熔断器仪表盘监控熔断: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102673599 Spr ...

  6. [Java 基础]-- java提供的访问数据库的接口(jdbc)

    JDBC java提供的一套访问数据库接口 java--->操作数据库 JDBC发展历史:[了解] TYPE1:JDBC--odbc桥:间接访问数据库//odbc是c语言的jdbc TYPE2: ...

  7. AliasDB:简单统一灵活的数据库访问库(支持MSSQL/MySQL/SQLite/Oracle/ODBC/OleDb)适用于中小型系统...

    数据库访问各种规模的应用程序不可避免的操作,.NET对提供了简单方便统一的数据库访问类,并且通过Enterprise Lib提供了更为顶层的数据库访问库.在我的人个工作中,现在用得最多的就是通过&qu ...

  8. ruby mysql dbi_Ruby/DBI-数据库访问接口

    Ruby/DBI 是一个跟 Perl/DBI 类似的统一数据库访问接口,支持各种流行的数据库. 下面是一段使用了 Ruby/DBI 的代码: #!/usr/bin/ruby -w # simple.r ...

  9. VB.NET学习笔记:ADO.NET操作ACCESS数据库——ADO.NET数据访问接口

    一.ADO.NET概述 Ado.net基于XML和离线计算模型. ADO.net的两个核心组件:.Net数据提供程序.DataSet. .net数据提供程序用来与数据库的连接,如SQLServer.n ...

最新文章

  1. 是同步方法还是 synchronized 代码?-- 详解多线程同步规则
  2. Cocos2d 游戏状态机
  3. 分享:SringBuffer与String的区别
  4. 设计模式复习-中介者模式
  5. python dlib学习(八):训练人脸特征点检测器
  6. 无法绑定由多个部分组成的标识符“System.Data.DataRowView”
  7. vs为什么打了断点不断_为什么西餐厅里的牛排又嫩又多汁?原来大厨都做了“这一步”...
  8. 每天一道LeetCode-----将有序序列转成高度平衡二叉搜索树
  9. f12 卡 谷歌浏览器_抢券第二课:利用浏览器F12获取优惠券请求链接
  10. 【C语言】通过原子操作实现加减乘除功能Ⅰ
  11. 网络操作系统第1章习题
  12. Java面试之锁-自旋锁
  13. mysql随机显示记录_mysql随机提取记录数的方法
  14. Android Bitmap 加载与像素操作
  15. JMeter基础教程1:若隐若现的参数化
  16. 四大逆向工程软件简介
  17. 如何让双十一数据大屏讲出故事?设计有口诀
  18. 编写matlab语句计算试题,MATLAB测验考试题
  19. w10计算机无法打印,win10提示“无法打印 似乎未安装打印机”怎么办
  20. 抖音直播间怎样避免被封禁,直播间行为规范必看:国仁楠哥

热门文章

  1. 百度api 一直提示token错误_phpcms小程序插件小程序万能接口api(支持微信、百度)...
  2. xssfsheet removerow 剩下空白行怎么处理_糟糕!开瓶时酒塞不小心掉进酒里该怎么处理?...
  3. postman生成python代码_python代码直接生成可执行exe文件
  4. python行数据切片_通过切片访问DataFrame行
  5. Pandas Timedelta对象
  6. oracle使用连接池,使用Oracle的数据连接池
  7. “吸才”的字节跳动和“散才”的好未来
  8. Java基础学习总结(167)——Java项目实践中如何实现幂等
  9. Redis学习总结(4)——Spring Data操作Redis
  10. Tomcat学习总结(14)—— Tomcat常见面试题