简单的SQL注入,往往会给应用程序造成严重的问题。最长见的SQL注入则是基于查询的攻击,使用字符串串联构建查询。而这种类型的漏洞则是最长发生在WEB应用程序上,攻击者通过这种漏洞来获取更多的数据、权限等等。
举个例子(非常简单的页面,没有过滤SQL语句等),例如你现在需要在页面上输入用户名和密码来进行登录验证,而程序的代码使用了字符串串联如下:
void validate(String name, String password, Connection conn) throws SQLException {
String sql = "select * from t_users where name='" + name
+ "' and password='" + password + "'";
Statement st = null;
ResultSet rs = null;
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
if(rs == null || rs.next() == false)
// TODO name or password is wrong.
else {
// TODO password is true.
}
} finally {
if(rs != null)
try {
rs.close();
} catch (Exception e) {
}
if(st != null)
try {
st.close();
} catch (Exception e) {
}
}
}
如果用户输入的用户名为AAA,密码为x' or '2' = '2,这个时候程序的SQL查询字符串将会串联成如下语句:
select * from t_users where name='AAA' and password='x' or '2' = '2'
以上语句是永远为真的,因为2确实等于2,这个时候验证是通过,而且还有会认为是数据库第一条数据的用户,而往往很多超级用户都是第一条数据,这个时候攻击者就可以利用这个漏洞来获取到更高的操作权限,从而获取更多的资料等等。对于这个错误,程序开发人员应该避免这种字符串串联直接查询执行,而是应该使用查询准备来运行数据库交互,以上代码可以修改为如下:
validate(String name, String password, Connection conn) throws SQLException {
String sql = "select * from t_users where name=? and password=?";
PreparedStatement st = null;
ResultSet rs = null;
try {
st = conn.prepareStatement(sql);
st.setString(1, name);
st.setString(2, password);
rs = st.executeQuery();
if (rs == null || rs.next() == false)
// TODO name or password is wrong.
else {
// TODO password is true.
}
} finally {
if (rs != null)
try {
rs.close();
} catch (Exception e) {
}
if (st != null)
try {
st.close();
} catch (Exception e) {
}
}
}
分享到:
相关推荐
SQL 注入基础知识点总结 SQL 注入是指 web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法...
SQL注入是一种常见的网络安全漏洞,发生在应用程序使用用户输入的SQL代码直接构建数据库查询时。当攻击者能够通过输入恶意SQL语句来控制或篡改数据库查询,他们就能获取敏感信息、修改数据甚至完全控制系统。《SQL...
SQL注入是一种常见的网络安全威胁,它利用了Web应用程序中对用户输入数据处理的不足,使得攻击者能够注入恶意的SQL代码,以获取未经授权的数据或者控制数据库服务器。以下是对SQL注入漏洞的全面讲解,包括其原理、...
### SQL注入攻击实验报告知识点详解 #### 一、实验背景及目的 - **实验背景**:随着互联网技术的发展,Web应用程序越来越广泛地应用于各种场景之中。然而,由于开发者对安全性的忽视,使得许多Web应用程序存在安全...
SQL注入是一种严重的安全威胁,它允许攻击者通过在应用程序的输入字段中插入恶意SQL代码来执行未经授权的数据库操作。攻击者通常寻找没有适当验证和过滤的用户输入,然后利用这些漏洞来构造能改变原始SQL语句意图的...
DB2数据库SQL注入手册 DB2数据库SQL注入手册是指在使用DB2数据库时,如何检测和防止SQL注入攻击的一份指南。SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过在输入字段中 inject恶意SQL代码来访问或控制...
"SQL注入漏洞全接触"知识点总结 一、 SQL注入漏洞的定义和原理 * SQL注入漏洞是指攻击者通过构造特殊的输入,来获取或修改服务器上的敏感数据。 * SQL注入漏洞的原理是从客户端提交特殊的代码,从而收集程序及...
SQL注入是一种常见的网络安全漏洞,主要出现在使用动态SQL语句构建数据库查询的应用程序中。这个"sql注入网站源码"提供了一个具有SQL注入漏洞的ASP(Active Server Pages)网站实例,对于学习如何检测、防范和修复这...
【描述】:“SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑” 描述中的重复部分强调了御剑作为SQL注入工具的核心属性。SQL注入是黑客通过构造恶意的SQL语句...
SQL手工注入大全:包含各种类型的SQL注入,实现手工注入的乐趣,此资源你值得拥有。 此资源包含:宽字节注入、SQL手工注入漏洞测试(Oracle数据库)、SQL手工注入漏洞测试(Sql Server数据库)、SQL手工注入漏洞测试...
机器学习检测SQL注入# ML-for-SQL-Injection机器学习检测SQL注入本项目是使用机器学习算法来分类SQL注入语句与正常语句:使用了SVM,Adaboost,决策树,随机森林,逻辑斯蒂回归,KNN,贝叶斯等算法分别对SQL注入语句...
### SQL注入字典Fuzz详解 #### 一、引言 在网络安全领域,SQL注入攻击是一种常见的威胁方式,它利用数据库应用系统中的漏洞,通过恶意构造的SQL语句来获取敏感数据或对数据库进行非法操作。为了有效地检测和防范...
在当今网络技术迅猛发展的时代,Web应用的安全问题日益凸显,其中SQL注入攻击作为一种常见的网络攻击手段,对数据库的安全性构成了极大的威胁。C#语言因其在开发Microsoft .NET框架应用程序中的主导地位,常用于开发...
从标签"防注入"、"最新ASP SQL注入代码"、"最新ASP通用防SQL注入代码"我们可以看出,这个压缩包文件的核心内容是关于防止ASP应用程序遭受SQL注入攻击的代码示例,它适用于各种ASP应用场景。 在压缩包内的文件"通用...
### .NET中SQL注入式攻击与防范秘籍 #### SQL注入概述 SQL注入是一种常见的网络安全攻击方式,攻击者通过在数据库查询中插入恶意SQL语句,以达到非法获取数据、篡改数据甚至控制整个数据库的目的。对于使用.NET...
在IT行业中,SQL注入是一种常见的安全威胁,攻击者通过输入恶意的SQL代码来获取、修改、删除数据库中的敏感信息。为了防止这种情况发生,开发者需要在应用程序中实施有效的防御策略,其中一种方法就是使用过滤器...
### Python中防止SQL注入的方法详解 #### 前言 SQL注入是一种常见的网络安全攻击手段,攻击者通过在输入数据中嵌入恶意SQL代码,利用应用程序的漏洞执行非法操作,如篡改、删除或检索敏感数据等。对于使用Python...
SQL注入是一种常见的网络攻击技术,攻击者通过在Web应用的输入字段中嵌入恶意的SQL代码,利用数据库管理系统(DBMS)的解析错误执行非法操作。SQL注入能够绕过正常的认证机制,获取敏感信息,甚至控制整个数据库。...
**SQL注入工具——PangolinsDL详解** SQL注入是一种常见的网络安全漏洞,它允许攻击者通过输入恶意的SQL代码来操纵或获取数据库中的敏感信息。针对这种威胁,开发者和安全研究人员常常使用SQL注入工具来进行测试和...
SQL注入攻击与防御技术白皮书.pdf 本文档主要介绍了SQL注入攻击的原理、方式、危害及防御措施,旨在帮助读者更好地理解和防御这种常见的数据库漏洞攻击方式。 1.SQL注入攻击简介 SQL注入攻击是一种针对数据库的...