JDBC中的SQL注入问题
使用预处理(
PreparedStatement
)解决SQL注入问题:
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SQLInject { /** * @param args * @throws SQLException */ public static void main(String[] args) throws SQLException { // long start = System.currentTimeMillis(); // for (int i = 0; i < 100; i++) read("name1"); // long end = System.currentTimeMillis(); // System.out.println("read:" + (end - start)); // start = System.currentTimeMillis(); // for (int i = 0; i < 100; i++) read1("name1"); // end = System.currentTimeMillis(); // System.out.println("read1:" + (end - start)); read1("' or 1 or '");//被注入 } static void read(String name) throws SQLException { Connection conn = null; PreparedStatement ps = null;//预处理 ResultSet rs = null; try { // 2.建立连接 conn = JdbcUtils.getConnection(); // conn = JdbcUtilsSing.getInstance().getConnection(); // 3.创建语句 String sql = "select id, name, money, birthday from user where name=?"; ps = conn.prepareStatement(sql); ps.setString(1, name); // 4.执行语句 rs = ps.executeQuery(); // 5.处理结果 while (rs.next()) { System.out.println(rs.getInt("id") + "\t" + rs.getString("name") + "\t" + rs.getDate("birthday") + "\t" + rs.getFloat("money")); } } finally { JdbcUtils.free(rs, ps, conn); } } static void read1(String name) throws SQLException { Connection conn = null; Statement st = null;//效率比PreparedStatement高 ResultSet rs = null; try { // 2.建立连接 conn = JdbcUtils.getConnection(); // conn = JdbcUtilsSing.getInstance().getConnection(); // 3.创建语句 String sql = "select id, name, money, birthday from user where name='" + name + "'"; st = conn.createStatement(); // 4.执行语句 rs = st.executeQuery(sql); // 5.处理结果 while (rs.next()) { System.out.println(rs.getObject("id") + "\t" + rs.getObject("name") + "\t" + rs.getObject("birthday") + "\t" + rs.getObject("money")); } } finally { JdbcUtils.free(rs, st, conn); } } }
相关推荐
防sql注入和xss攻击, springmv拦截器,可自由调整需要拦截的字符
Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询解析 1.JDBC概述 2.操作流程 1.初始化项目,导入`驱动jar包` 2.加载驱动类 3.创建数据库连接对象`Connection` 4.创建`Statement` (此处存在SQL注入问题)...
移动开发小白树懒,在学习jdbc.对于代码的优化和API的使用做了一些详细的理解..
本章节课程主要从以下三方面详细的介绍了如何针对java代码中sql注入的审计方法及黑盒验证: 1、JDBC连接方式下sql注入的存在的形态及修复方法,like、in情况在如何安全使用预处理来防范sql注入 2、在使用Mybatis框架...
在我们平时的开发中,作为新手写JDBC很有可能忽略了一点,那是根本没有考虑SQL注入的问题, 那么,什么是SQL注入,以及如何防止SQL注入的问题。 一什么是SQL注入 所谓SQL注入,是通过把SQL命令插入到Web...
java连接mysql,和mysql语句注入检查,简单程序,需要自己提供数据库
JDBC(powernode CD2206)...7.6 使用PreparedStatement改进代码,解决SQL注入问题 八、编写JDBC工具类 九、CRUD操作 十、事务操作 十一、批处理 11.1 jdbc.properties 11.2 BatchDemo.java 11.3 没有进行批处理的耗时
Hibernate使用中防止SQL注入的几种方案 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 在获取便利操作的同时...
配合原生jdbc仿动态sql注入 if (ObjectUtil.isNotEmpty(maxLat)&&ObjectUtil.isNotEmpty(minLat)){ sqlParamList.add(new SqlParam("lat",minLat, SqlOpEnum.GE)); sqlParamList.add(new SqlParam("lat",maxLat, ...
利用JDBC工具类的方式实现mysql数据库的连接并且完成登录相关功能,并且通过PreparedStatement类实现防sql注入
Java教程中阐述了接口在开发中的真正作用,JDBC规范制定的背景,JDBC编程六部曲,JDBC事务,JDBC批处理,SQL注入,行级锁等,是学习JDBC最好的Java教程。JDBC 资源太大,传百度网盘了,链接在附件中,有需要的同学...
测试JDBC跟数据库建立连接、测试Statement接口的用法,执行SQL语句,以及SQL注入问题、测试ResultSet结果集的基本用法等等。
测试JDBC与数据库的连接以及SQL注入
2.SQL注入问题 3.PreparedStatement类 3.1.PreparedStatement和Statement的对比(面试题) 3.2.PreparedStatement和Statement的关系 3.3.小结 4.使用PreparedStatement完成登录 6.PreparedStatement...
包含对数据库进行增、删、查、改。防止恶意的sql注入。
# oracle driver # realdriver=oracle.jdbc.driver.OracleDriver # mysql Connector/J driver # realdriver=com.mysql.jdbc.Driver # informix driver # realdriver=com.informix.jdbc.IfxDriver ...realdriver3=
我们在写sql语句时,为了方便可能会进行拼接字符串,这样做的弊端就是可能被sql注入攻击,解决的办法也很简单。 //获取数据库连接 Connection connection = DBUtils.getConnection(); //在写sql语句时,使用?代替...
基于java+servlet,mysql实现web系统,适合应用于毕业设计,课程设计作业,系统均完全测试通过,可直接运行! 基于java+servlet,mysql实现web系统,适合应用于毕业设计,课程设计作业,系统均完全测试通过,可直接...
Java SQL检查器 用于测试Java代码是否存在SQL注入漏洞的实用程序。
提供预编译的功能,某种程度上可以避免sql注入的问题 4.提前做语法检查,在给?赋值的过程中要求数据类型一定要匹配,这样在某种程度上可以避免因为数据类型不匹配而发生的异常 CallableStatement:主要用来执行...