`
zhjump
  • 浏览: 10460 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

[3]JDBC中的SQL注入问题

    博客分类:
  • Java
阅读更多

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);
		}
	}

}

 

分享到:
评论

相关推荐

    sqljdbc和sqljdbc4 sqlserver最新驱动

    在实际使用时,要注意安全最佳实践,比如避免SQL注入,使用预编译的PreparedStatement,及时关闭数据库连接,以及考虑使用连接池以提高性能和资源管理。 7. 兼容性: 这些驱动通常兼容各种SQL Server版本,包括...

    如何解决sql注入问题

    ### 如何解决SQL注入问题:全面解析与防范策略 #### SQL注入概述 SQL注入是一种常见的安全漏洞,攻击者通过在应用程序的输入字段中插入恶意SQL语句,利用这些语句来操控数据库,获取未授权的数据访问,修改或破坏...

    sqljdbc和sqljdbc4

    此外,使用PreparedStatement可以防止SQL注入攻击,通过预编译SQL语句并用占位符替换动态参数。 **性能优化**:SQLJDBC4还提供了性能优化选项,例如批处理操作,允许一次提交多个SQL语句,减少网络往返次数。还可以...

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    2. **预编译语句(PreparedStatement)**:预编译的SQL语句可以显著提升执行速度,同时防止SQL注入攻击。 3. **批处理操作**:允许多个SQL语句一次性提交,减少网络通信次数,提高整体执行效率。 4. **游标支持**:...

    JDBC for sql 2012

    `Statement`适用于简单的非参数化查询,而`PreparedStatement`适用于参数化查询,能有效防止SQL注入攻击。 5. **处理结果集** 执行查询后,会返回一个`ResultSet`对象,我们可以遍历其中的行和列来获取数据。 ```...

    jdbc_sqlserver

    - `PreparedStatement`接口预编译SQL语句,提供更高效、安全的方式,尤其在处理参数时,防止SQL注入,如: ```java PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM myTable WHERE id = ?"); ...

    mybatis如何防止SQL注入

    这种方式虽然灵活,但容易导致SQL注入问题。例如: ```xml SELECT id, title, author, content FROM blog ORDER BY ${orderParam} ``` 如果`orderParam`的值没有经过恰当的处理,直接使用`ORDER BY ${...

    JDBC 连接SQL2005

    除了基本的连接和执行SQL,JDBC还支持预编译的PreparedStatement,用于提高性能和防止SQL注入。PreparedStatement允许在SQL语句中使用占位符,然后通过`setXXX()`方法设置参数。 此外,为了优化性能,可以使用...

    jdbc for sqlserver

    `Statement`适用于简单的静态SQL,而`PreparedStatement`更安全,支持参数化查询,防止SQL注入。 4. **执行SQL操作**:通过`executeQuery()`, `executeUpdate()`等方法执行SQL查询和修改操作。例如: ```java ...

    Java-JDBC【源码】JDBC概述、获取连接、SQL注入问题与解决、查询解析

    Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询解析 1.JDBC概述 2.操作流程 1.初始化项目,导入`驱动jar包` 2.加载驱动类 3.创建数据库连接对象`Connection` 4.创建`Statement` (此处存在SQL注入问题)...

    防sql注入和xss攻击, springmv拦截器

    防sql注入和xss攻击, springmv拦截器,可自由调整需要拦截的字符

    sqljdbc 1.0 3.0 4.0

    PreparedStatement是预编译的,通常用于提高性能并防止SQL注入攻击。 4. `ResultSet`: 执行查询后返回的结果集,可以遍历并获取数据。 在使用SQL Server JDBC Driver时,开发者通常需要执行以下步骤: 1. 加载和...

    mybatissql_mybatis解决sql注入

    标题 "mybatissql_mybatis解决sql注入" 暗示了我们正在讨论MyBatis框架如何处理SQL注入问题。SQL注入是一种常见的安全漏洞,攻击者可以通过恶意输入篡改SQL查询,获取、修改或删除数据库中的敏感数据。MyBatis,作为...

    java jdbc连接sqlserver所需要的jar包

    Java JDBC(Java Database Connectivity)是Java语言中用于...记住,安全性和性能优化是开发过程中的重要考虑因素,比如使用预编译的`PreparedStatement`防止SQL注入,以及及时关闭结果集和数据库连接以避免资源泄漏。

    SQL注入源码+SQL注入命令

    SQL注入是一种常见的网络安全威胁,它发生在应用程序不恰当地处理用户输入数据时,导致攻击者能够构造恶意SQL语句,从而获取、修改、删除或者控制数据库中的敏感信息。在这个实验中,我们将关注Java语言如何处理SQL...

    sqljdbc42 jdbc for java

    3. 参数化查询:避免SQL注入攻击,应使用PreparedStatement进行参数化查询。 4. 使用JDBC 4.2新特性:如利用try-with-resources语法自动关闭资源,简化代码。 总结,SQLJDBC42作为Java与SQL Server之间的关键接口,...

    jdbc连接sqlserver2005

    为了避免SQL注入攻击,推荐使用`PreparedStatement`。它可以预编译SQL语句,并允许动态参数化。 ```java String sql = "INSERT INTO myTable (name, age) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepare...

    jdbc sqlserver2014

    `PreparedStatement`更安全,因为它允许预编译SQL,防止SQL注入。 4. **结果集处理**:执行查询后,结果会被返回为`ResultSet`对象。遍历结果集,获取每行数据并处理。 5. **事务管理**:JDBC支持事务控制,包括...

    sqljdbc4 (SQL连接驱动包)

    `PreparedStatement`预编译SQL,提高性能,并防止SQL注入攻击;`CallableStatement`用于调用存储过程。 5. **结果集处理**:`ResultSet`接口用于存储查询结果。开发者可以通过迭代`ResultSet`对象来获取和处理数据...

    JAVA jdbc连接sql2000详细流程

    除了基本的`Statement`,还有更安全、高效的`PreparedStatement`,它可以防止SQL注入,并允许预编译SQL语句。此外,JDBC 4.0引入了`ConnectionPoolDataSource`和`PooledConnection`,用于管理数据库连接池,提高性能...

Global site tag (gtag.js) - Google Analytics