博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用PreparedStatement预防SQL注入
阅读量:5146 次
发布时间:2019-06-13

本文共 1618 字,大约阅读时间需要 5 分钟。

1、什么是sql注入

  SQL 注入是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为。  

  例如登录用户名采用  ' or 1=1 or username=‘,后台数据查询语句就变成

  sql = select * from users where username='' or 1=1 or username='' and password='"+password+"'",由于sql中and的优先级比or高,所以整条查询语句等价于:

  sql = select * from users where true;这样就造成随意登录

 

2、预防sql注入

PreperedStatement是Statement的孩子,它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象而言:PreperedStatement可以避免SQL注入的问题。Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。 

 

1 public void add(User user) { 2         Connection conn = null; 3         PreparedStatement st = null; 4         ResultSet rs = null; 5         try{ 6             conn = JdbcUtils.getConnection(); 7             String sql = "insert into users(id,username,password,email,birthday,nickname) values(?,?,?,?,?,?)";//利用占位符 8             st = conn.prepareStatement(sql); 9             st.setString(1, user.getId());10             st.setString(2, user.getUsername());11             st.setString(3, user.getPassword());12             st.setString(4, user.getEmail());13             st.setDate(5, new java.sql.Date(user.getBirthday().getTime()));14             st.setString(6, user.getNickname());15             int num = st.executeUpdate();16             if(num<1){17                 throw new RuntimeException(”用户不存在");18             }19         }catch (Exception e) {20             throw new DaoException(e); 21         }finally{22             JdbcUtils.release(conn, st, rs);23         }24         25         26     }

 

 

 

 

 

转载于:https://www.cnblogs.com/niuchuangfeng/p/9164003.html

你可能感兴趣的文章
【题解】[P4178 Tree]
查看>>
QML学习笔记之一
查看>>
ionic2+ 基础
查看>>
MyBaits动态sql语句
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
ad logon hour
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
tmux的简单快捷键
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android 官方新手指导教程
查看>>
安装 Express
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>
【Linux】ping命令详解
查看>>
Oracle中包的创建
查看>>
关于PHP会话:session和cookie
查看>>
jQuery on(),live(),trigger()
查看>>