JDBC中的SQL注入问题
来源:互联网 发布:浙江人事考试机考网络 编辑:程序博客网 时间:2024/06/06 08:53
在Java中执行SQL语句的过程中,由于用户提供的信息中含有SQL关键字,进行编译的过程中,会扭曲原SQL语句的含义,所以我们应当避免SQL语句的注入,那么如何避免呢?
先定义SQl语句框架,对SQL语句进行预先编译,只编译一次,然后再去接收用户提供的信息;
* 用户提供的信息即使含有SQL语句的关键字,这些关键字不参与这次SQL语句的编译,是不起作用的。
* 采用这种方式可以解决SQL注入问题
* 有的系统中是需要SQL注入的,这个时候必须使用java.sql.Statement;
* 有的系统不需要SQL注入的,这个时候必须使用java.sql.PreparedStatement;
PreparedStatement的优点:
* 1.可以防止SQL注入;
* 2.SQL语句对Statement来说是编译一次执行一次;编译N次执行N次。
* 但SQL语句对于PreparedStatement来说是编译一次,执行N次。所以PreparedStatement执行效率更高
* 3.PreparedStatement是类安全型。【编译期检查数据类型】
改进后等用户登陆代码如下:
public class JDBCTest06 {public static void main(String[] args)throws Exception {BufferedReader br=new BufferedReader(new InputStreamReader(System.in));System.out.println("请登陆");System.out.println("用户名:");String username=br.readLine();System.out.println("密码:");String userpwd=br.readLine();br.close();//调用登陆方法登陆login(username,userpwd);}public static void login(String username, String userpwd) {Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;boolean LoginSuccess=false;try {//1注册驱动Class.forName("com.mysql.jdbc.Driver");//2获取连接conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123");//3获取预编译的数据库对象String sql="select * from tbl_user where username=? and userpwd=?";//先定义SQL语句的框架ps=conn.prepareStatement(sql);//执行到此处,现将SQL语句框架进行预编译//给??复制ps.setString(1,username);ps.setString(2, userpwd);//4执行SQL语句rs=ps.executeQuery();//5处理结果集 if(rs.next()){ LoginSuccess=true; }} catch (Exception e) {e.printStackTrace();}finally{//6释放资源if(rs!=null){try {rs.close();} catch (SQLException e){e.printStackTrace();}}if(ps!=null){try {ps.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}System.out.println(LoginSuccess?"登录成功":"登陆失败");}}
0 0
- JDBC中的SQL注入问题
- JDBC-SQL注入问题
- JDBC防止sql注入
- JDBC-Sql防注入
- JDBC(PreparedStatement,sql注入)
- JDBC--解决sql注入
- JDBC技术详解(二)--sql注入攻击问题
- JDBC访问数据库的过程,sql注入问题预总结
- mysql之jdbc连接数据库和sql注入的问题
- JDBC—Sql注入问题和事务控制
- SQL Server JDBC连接中的问题
- JDBC如何防止SQL注入
- jdbc防止sql注入-PreparedStatement
- jdbc防止sql注入-PreparedStatement
- Oracle Jdbc 防sql注入
- JDBC 简介 ,SQL 注入 ,JDBC操作数据库
- ASP中的SQL注入
- 登陆中的SQL注入
- [bzoj4710][JSOI2011]分特产
- [Gradle中文教程系列]-跟我学Gradle-5.7:依赖-上传与发布番外篇-发布到Jcenter
- HDU - 3709 数位dp
- The zen of kobjects (linux kobjects 要旨)
- linux终端快捷键
- JDBC中的SQL注入问题
- 1.16防止双击onclick
- String StringBuffer StringBuider 的区别
- 从零开始搭建VUE基础框架
- 跳槽次数有点多,简历该这样写!
- Entity Framework在WCF中序列化的问题 学习
- python转换格式,Matlab读取文件
- C#初始化数组的三种方式
- ibatis一对多示例