原始代码:
package jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* @author HaoWang
*/
public class SQLInject {
public static void main(String[] args) {
read("Tom");
read("'or 1 or'");
}
public static void read(String name) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
st = conn.createStatement();
rs = st.executeQuery("Select sid,name,sex,birthday from Students where name='"+name+"'");
while (rs.next()) {
System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t" + rs.getObject(4));
}
} catch (SQLException ex) {
System.out.println(ex.toString());
} finally {
JdbcUtils.free(conn, st, rs);
}
}
}
产生SQL注入问题的原因:在SQL中包含特殊字符或SQL的关键字(如:' or 1 or ')时,会产生不可意料的结果。
解决方案:可用PreparedStatement来解决。
PreperedStatement(从Statement扩展而来)相对Statement的优点:
1.没有SQL注入的问题。
2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。
3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。
public static void read1(String name) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = null;
try {
conn = JdbcUtils.getConnection();
sql = "Select sid,name,sex,birthday from Students where name=?";
ps = conn.prepareStatement(sql);
ps.setString(1, name);
rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t" + rs.getObject(4));
}
} catch (SQLException ex) {
System.out.println(ex.toString());
} finally {
JdbcUtils.free(conn, ps, rs);
}
}
分享到:
相关推荐
### 如何解决SQL注入问题:全面解析与防范策略 #### SQL注入概述 SQL注入是一种常见的安全漏洞,攻击者通过在应用程序的输入字段中插入恶意SQL语句,利用这些语句来操控数据库,获取未授权的数据访问,修改或破坏...
以下是对"一次SQL注入问题的筛查报告"的详细分析和相关知识点的介绍: 一、SQL注入的基础知识 1. SQL注入原理:当用户输入的数据未经处理就直接拼接到SQL查询语句中时,攻击者可以通过构造特殊输入,使得查询执行非...
标题 "mybatissql_mybatis解决sql注入" 暗示了我们正在讨论MyBatis框架如何处理SQL注入问题。SQL注入是一种常见的安全漏洞,攻击者可以通过恶意输入篡改SQL查询,获取、修改或删除数据库中的敏感数据。MyBatis,作为...
7. **使用ORM框架**:像Entity Framework这样的对象关系映射工具会自动处理SQL注入问题,因为它使用参数化查询。 8. **保持更新**:定期更新数据库驱动程序和ASP.NET框架,以获取最新的安全补丁。 9. **教育用户**...
Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询解析 1.JDBC概述 2.操作流程 1.初始化项目,导入`驱动jar包` 2.加载驱动类 3.创建数据库连接对象`Connection` 4.创建`Statement` (此处存在SQL注入问题)...
PHP应用同样面临SQL注入问题,开发者应使用预处理语句(如PDO或MySQLi的prepare/execute)来防止注入,并避免使用`eval()`等危险函数。 5. 检测和防御SQL注入和跨站脚本攻击: - 使用自动化工具进行扫描,如...
在Python的pymysql库中,处理SQL注入问题至关重要,因为如果不加以防范,可能会导致敏感数据泄露或系统破坏。本文将深入讲解如何使用pymysql有效地解决SQL注入问题。 首先,理解SQL注入的根本原因。当使用动态字符...
这种方式虽然灵活,但容易导致SQL注入问题。例如: ```xml SELECT id, title, author, content FROM blog ORDER BY ${orderParam} ``` 如果`orderParam`的值没有经过恰当的处理,直接使用`ORDER BY ${...
SQL注入攻击是一种已经长期存在,但近年来日益增长的安全威胁,《安全技术经典译丛:SQL注入攻击与防御(第2版)》致力于深入探讨SQL注入问题。 《安全技术经典译丛:SQL注入攻击与防御(第2版)》前一版荣获2009...
方法一:利用google高级搜索,比如搜索url如.asp?... 您可能感兴趣的文章:Java面试题解析之判断以及防止SQL注入SQL注入原理与解决方法代码示例通过ibatis解决sql注入问题Win2003服务器防SQL注入神器–D盾_IIS防火墙
框架如Hibernate、MyBatis等在设计时已考虑了SQL注入问题,它们会自动处理预编译语句和参数绑定,减少开发者的安全顾虑。 6. **最小权限原则**: 数据库连接应使用具有最小权限的账户,这样即使发生SQL注入,攻击...
SQL注入攻击是一种已经长期存在,但近年来日益增长的安全威胁,克拉克所著的《SQL注入攻击与防御(第2版)》致力于深入探讨SQL注入问题。《SQL注入攻击与防御(第2版)》前一版荣获2009Bejtlich最佳图书奖,第2版对内容...
【描述】"好用的sql注入分析工具"表明该工具用户友好,易于操作,能够高效地帮助用户识别和处理潜在的SQL注入问题。在日常的安全维护工作中,这样的工具能够显著减轻安全人员的工作负担,提升网络安全防护能力。 ...
总的来说,"SQL注入漏洞检测原型工具"是一个综合性的解决方案,旨在帮助开发者和安全专家识别和修复SQL注入问题。它结合了动态检测和静态分析两种策略,覆盖了从运行时到开发阶段的整个过程。通过学习和使用这个工具...
- 使用ORM框架:如Hibernate、MyBatis等,它们在底层处理了SQL注入问题,减少了直接编写SQL语句的机会。 - 输入验证:对用户输入进行校验,限制长度、类型和格式,拒绝不符合规则的输入。 - 使用过滤器(Filter)...
在众多网络攻击手段中,SQL注入攻击成为了一个焦点问题。SQL注入攻击是一种代码注入技术,攻击者利用它通过在Web应用程序中输入恶意SQL语句,试图对后端数据库进行未授权操作。这种攻击可以对Web应用程序及数据库...
该工具的出现主要是为了帮助安全研究人员和渗透测试人员在合法的授权下,发现并修复系统中的SQL注入问题,确保网站和数据库的安全。它可能包含以下功能: 1. **自动扫描**:SSQLInjection可能具备自动化扫描能力,...
《SQL注入攻击与防御 第2版》是一本深入探讨网络安全领域中SQL注入问题的专业书籍。SQL注入是网络攻击的一种常见手法,它利用了应用程序对用户输入数据处理的不当,允许攻击者通过输入恶意的SQL代码来操纵数据库,...
5. **使用ORM框架**:如Hibernate、Entity Framework等,它们在一定程度上可以自动处理SQL注入问题。 五、安全编码实践 1. 使用最新的编程语言版本和库,因为它们通常包含更强的安全特性。 2. 避免动态SQL,尽可能...
5. **使用ORM(对象关系映射)框架**:如Hibernate,它们可以自动处理SQL注入问题。 6. **Web应用防火墙(WAF)**:可以检测并阻止SQL注入攻击。 五、学习资源: 压缩包中的“SQL注入 学习资料”可能包括教程文档、...