sql注入的问题,PreparedStatement
2015-09-29 10:44
387 查看
package cn.itcast.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SQLInject { public static void main(String[] args) throws SQLException { read("lisi"); System.out.println("-----------------------"); read("'or 1 or'"); // sql注入,or是sql关键字,1表示真,会查询出全部结果 } static void read(String name) throws SQLException { Connection conn = null; Statement st = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); st = conn.createStatement(); String sql = "select id,name,birthday,money from user where name='" + name + "'"; rs = st.executeQuery(sql); while (rs.next()) { System.out.println("id:" + rs.getObject("id") + "\tname:" + rs.getObject("name") + "\tbirthday:" + rs.getObject("birthday") + "\tmoney:" + rs.getObject("money")); } } finally { JdbcUtils.free(rs, st, conn); } } }
为解决这个问题可以使用
PreparedStatement解决
package cn.itcast.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SQLInject { public static void main(String[] args) throws SQLException { read("lisi"); System.out.println("-----------------------"); read("'or 1 or'"); //现在这个查询不到结果 } static void read(String name) throws SQLException { Connection conn = null; PreparedStatement ps = null; //预处理的查询语句,过滤掉特殊字符,避免sql注入;PreparedStatement速度比Statement更快一些 ResultSet rs = null; try { conn = JdbcUtils.getConnection(); String sql = "select id,name,birthday,money from user where name=?"; ps = conn.prepareStatement(sql); ps.setString(1, name); rs = ps.executeQuery(); while (rs.next()) { System.out.println("id:" + rs.getObject("id") + "\tname:" + rs.getObject("name") + "\tbirthday:" + rs.getObject("birthday") + "\tmoney:" + rs.getObject("money")); } } finally { JdbcUtils.free(rs, ps, conn); } } }
工具类JdbcUtils
相关文章推荐
- JDBC数据库的连接基本知识点
- redis mac版服务优化
- SQLAlchemy操作MariaDB笔记之三
- MySQL中的锁(表锁、行锁)
- 从一个虚拟机移动数据库到另一个虚拟机
- 使用数据库定义资源、角色和权限
- Windows系统Mongodb安装教程
- oracle之sequence详解
- SqlBulkCopy 使用案例
- c#简单的注册程序,连接数据库
- MySQL中information_schema是什么
- oracle赋权和job操作
- mysql 字符串
- Redis Cluster中不能使用SUNION等命令
- 基于MariaDB Galera Cluster的数据库HA方案
- sql 注入问题
- memcache的线程模型
- MSSQL自动备份数据库
- 【转】数据库设计经验谈(一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键)
- redis 主从服务器