`

SQL注入

    博客分类:
  • JAVA
阅读更多
    简单的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) {
				}
		}
	}
0
0
分享到:
评论

相关推荐

    sql注入讲解ppt.pptx

    SQL 注入基础知识点总结 SQL 注入是指 web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法...

    SQL 注入天书.pdf

    SQL注入是一种常见的网络安全漏洞,发生在应用程序使用用户输入的SQL代码直接构建数据库查询时。当攻击者能够通过输入恶意SQL语句来控制或篡改数据库查询,他们就能获取敏感信息、修改数据甚至完全控制系统。《SQL...

    SQL注入全面讲解技术文档

    SQL注入是一种常见的网络安全威胁,它利用了Web应用程序中对用户输入数据处理的不足,使得攻击者能够注入恶意的SQL代码,以获取未经授权的数据或者控制数据库服务器。以下是对SQL注入漏洞的全面讲解,包括其原理、...

    SQL注入攻击实验报告

    ### SQL注入攻击实验报告知识点详解 #### 一、实验背景及目的 - **实验背景**:随着互联网技术的发展,Web应用程序越来越广泛地应用于各种场景之中。然而,由于开发者对安全性的忽视,使得许多Web应用程序存在安全...

    C#防SQL注入

    C#防SQL注入 C#防SQL注入是指在C#程序中防止SQL注入攻击的方法。SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过在输入字段中.inject恶意SQL代码,来访问、修改或删除数据库中的数据。为了防止SQL注入,C#...

    SQL注入原理以及Spring Boot如何防止SQL注入(含详细示例代码)

    SQL注入是一种严重的安全威胁,它允许攻击者通过在应用程序的输入字段中插入恶意SQL代码来执行未经授权的数据库操作。攻击者通常寻找没有适当验证和过滤的用户输入,然后利用这些漏洞来构造能改变原始SQL语句意图的...

    DB2数据库SQL注入手册1

    DB2数据库SQL注入手册 DB2数据库SQL注入手册是指在使用DB2数据库时,如何检测和防止SQL注入攻击的一份指南。SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过在输入字段中 inject恶意SQL代码来访问或控制...

    SQL注入漏洞全接触.ppt

    "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注入,实现手工注入的乐趣,此资源你值得拥有。

    SQL手工注入大全:包含各种类型的SQL注入,实现手工注入的乐趣,此资源你值得拥有。 此资源包含:宽字节注入、SQL手工注入漏洞测试(Oracle数据库)、SQL手工注入漏洞测试(Sql Server数据库)、SQL手工注入漏洞测试...

    机器学习检测SQL注入.zip

    机器学习检测SQL注入# ML-for-SQL-Injection机器学习检测SQL注入本项目是使用机器学习算法来分类SQL注入语句与正常语句:使用了SVM,Adaboost,决策树,随机森林,逻辑斯蒂回归,KNN,贝叶斯等算法分别对SQL注入语句...

    sql注入字典fuzz

    ### SQL注入字典Fuzz详解 #### 一、引言 在网络安全领域,SQL注入攻击是一种常见的威胁方式,它利用数据库应用系统中的漏洞,通过恶意构造的SQL语句来获取敏感数据或对数据库进行非法操作。为了有效地检测和防范...

    最新ASP通用防SQL注入代码

    从标签"防注入"、"最新ASP SQL注入代码"、"最新ASP通用防SQL注入代码"我们可以看出,这个压缩包文件的核心内容是关于防止ASP应用程序遭受SQL注入攻击的代码示例,它适用于各种ASP应用场景。 在压缩包内的文件"通用...

    net中sql注入式攻击与防范秘籍

    ### .NET中SQL注入式攻击与防范秘籍 #### SQL注入概述 SQL注入是一种常见的网络安全攻击方式,攻击者通过在数据库查询中插入恶意SQL语句,以达到非法获取数据、篡改数据甚至控制整个数据库的目的。对于使用.NET...

    SQL注入过滤 (Java版)

    在IT行业中,SQL注入是一种常见的安全威胁,攻击者通过输入恶意的SQL代码来获取、修改、删除数据库中的敏感信息。为了防止这种情况发生,开发者需要在应用程序中实施有效的防御策略,其中一种方法就是使用过滤器...

    Python中防止sql注入的方法详解

    ### Python中防止SQL注入的方法详解 #### 前言 SQL注入是一种常见的网络安全攻击手段,攻击者通过在输入数据中嵌入恶意SQL代码,利用应用程序的漏洞执行非法操作,如篡改、删除或检索敏感数据等。对于使用Python...

    pangolinsdl—sql注入工具

    **SQL注入工具——PangolinsDL详解** SQL注入是一种常见的网络安全漏洞,它允许攻击者通过输入恶意的SQL代码来操纵或获取数据库中的敏感信息。针对这种威胁,开发者和安全研究人员常常使用SQL注入工具来进行测试和...

    SQL注入攻击与防御技术白皮书.pdf

    SQL注入攻击与防御技术白皮书.pdf 本文档主要介绍了SQL注入攻击的原理、方式、危害及防御措施,旨在帮助读者更好地理解和防御这种常见的数据库漏洞攻击方式。 1.SQL注入攻击简介 SQL注入攻击是一种针对数据库的...

    DVWA之SQL注入详解(包含知识点)

    SQL注入是网络安全领域中的一种常见的攻击手段,它允许攻击者通过在应用程序的输入参数中插入恶意的SQL代码片段,从而在数据库服务器上执行未授权的查询或操作。这种攻击方法对数据库安全构成了极大的威胁,因此了解...

Global site tag (gtag.js) - Google Analytics