`

sql注入及常用防护方法

    博客分类:
  • jsp
阅读更多
SQL 注入简介:
SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法

用户钻了SQL的空子,下面我们先来看下什么是SQL注入:

比如在一个登陆界面,要求用户输入用户名和密码:

用户名: ' or 1=1 --

密 码:

点登陆,如若没有做特殊处理,而只是一条带条件的查询语句如:

String sql="select * from users where username='"+userName+"' and password='"+password+"' "

那么这个非法用户就很得意的登陆进去了.(当然现在的有些语言的数据库API已经处理了这些问题)

这是为什么呢?我们来看看这条语句,将用户输入的数据替换后得到这样一条语句:

select * from users where username='' or 1=1 --' and password=''

为了更明白些,可以将其复制到SQL分析器中,将会发现,这条语句会将数据库的数据全部读出来,为什么呢?

很简单,看到条件后面 username='' or 1=1 用户名等于 '' 或 1=1 那么这个条件一定会成功,然后后面加两个-,这意味着

什么?没错,注释,它将后面的语句注释,让他们不起作用,这样就可以顺利的把数据库中的数据读取出来了。

这还是比较温柔的,如果是执行
select * from users where username='' ;DROP Database (DB Name) --' and password=''

.......其他的您可以自己想象。。。

那么我们怎么来处理这种情况呢?下面我以java为列给大家两种简单的方法:

第一种采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可:
String sql= "select * from users where username=? and password=?;
PreparedStatement preState = conn.prepareStatement(sql);
preState.setString(1, userName);
preState.setString(2, password);
ResultSet rs = preState.executeQuery();
...

第二种是采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入
public static String TransactSQLInjection(String str)
{
return str.replaceAll(".*([';]+|(--)+).*", " ");
}

userName=TransactSQLInjection(userName);
password=TransactSQLInjection(password);

String sql="select * from users where username='"+userName+"' and password='"+password+"' "
Statement sta = conn.createStatement();
ResultSet rs = sta.executeQuery(sql);
...
这个东西很简单,也很常见,方法还有很多,如果您有好的方法希望贴出来,大家一起学习学习。
分享到:
评论

相关推荐

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

    .NET框架提供了多种机制来防止SQL注入攻击,下面详细介绍几种常用的方法: 1. **使用ASP.NET请求验证** - **原理**:请求验证默认检查发送到服务器的所有数据,确保它们不包含可能引起安全问题的HTML标记或其他...

    防止sql注入demo

    - 使用预编译语句(PreparedStatement):这是防止SQL注入最常用的方法。预编译语句会将用户输入与SQL语句分离,确保即使输入含有恶意代码,也不会被执行。例如: ```java String query = "SELECT * FROM users ...

    详细的sql注入教程

    标题和描述中提到的知识点是关于SQL注入的教程和演示文档,主要涵盖了SQL注入的基本概念、几种常用的SQL注入工具(包括啊D注入工具、NBSI注入工具、Domain注入工具)及其具体操作流程,以及PHP注入利器ZBSI。...

    sql注入原理简介

    在Web开发中,预防SQL注入的常用方法包括使用PreparedStatement、使用存储过程、对所有输入进行验证,以及使用ORM框架等。通过这些技术手段,可以有效地阻止恶意用户通过SQL注入攻击的方式,获取敏感数据或破坏...

    防止SQL注入的5种方法

    ### 防止SQL注入的五种方法 随着互联网技术的发展与普及,网络安全问题日益凸显,其中SQL注入作为常见的安全威胁之一,对于任何基于数据库的应用系统都构成了潜在风险。SQL注入攻击通过非法输入数据,利用应用程序...

    SQL注入漏洞攻防攻略大全

    - **经典1=1、1=2测试法**:这是一种常用的测试方法,通过观察不同条件下的响应差异来判断是否存在SQL注入漏洞。 - **步骤1**:正常访问网页(例如:`http://www.example.com/query?id=1`) - **步骤2**:尝试添加...

    计算机病毒与防护:SQL注入漏洞的利用.ppt

    防范SQL注入的方法主要包括: 1. **输入验证**:对用户输入进行严格的检查和过滤,避免非法字符和SQL命令。 2. **参数化查询**:使用预编译的SQL语句,确保用户输入不会影响到查询结构。 3. **少用动态SQL**:尽...

    sql注入最新经典教学包

    学习这个教学包,你将能深入了解SQL注入的工作原理,熟悉常用的攻击和防御工具,以及如何在实际环境中防止SQL注入。同时,这也将帮助你提升对数据库安全的理解,为将来从事Web开发或网络安全工作打下坚实基础。记住...

    sql注入工具视频讲解

    通过观看这个"SQL注入工具视频讲解",你将能够掌握SQL注入的基本原理,了解常用工具的使用,并学习如何加强你的应用程序以防止此类攻击。在实际操作中,务必遵守法规,仅用于合法的安全测试和教育目的。

    数据库SQL注入攻击的全部资料打包

    这个压缩包可能包含各种有关SQL注入攻击的学习资料,如文章、教程、实例分析等,可以帮助你深入理解SQL注入的机制、检测方法和防护策略。你可以从以下几个方面进行学习: 1. **理论知识**:理解SQL的基础语法和注入...

    啊D SQL注入工具

    啊D SQL注入工具是一款在网络安全领域中常用的检测和利用SQL注入漏洞的专业软件。SQL注入是一种常见的网络攻击方式,攻击者通过在输入数据中嵌入恶意的SQL代码,以获取未授权的数据访问或控制系统操作。这款工具的...

    sql注入入门教程(附源码分析)

    对于开发人员而言,了解SQL注入的基本原理和防御方法至关重要;而对于安全研究人员来说,掌握先进的自动化工具能够大大提高工作效率。通过持续学习和实践,可以不断提升对抗SQL注入攻击的能力。

    PHP+Mysql 带SQL注入源码 下载

    MySQL是最常用的开源关系型数据库管理系统之一,而SQL注入则是一个常见的安全漏洞,通常发生在不正确过滤用户输入的情况下,导致恶意SQL命令被执行。 在压缩包文件 "6f3c3e6b84be4f4c83d65218d4e91b2a" 中,虽然...

    web安全性测试之sql注入进阶篇

    ### 二、SQL注入常用函数 掌握SQL语言中的关键函数对于有效利用SQL注入至关重要: - **长度函数**:用于获取字段长度,如`LEN()`(SQLServer)或`LEN(username)`(Access)。 - **ASCII/Unicode转换**:`ASCII()`...

    基于Apache PHP Mysql网站SQL注入防护探讨.pdf

    基于Apache PHP Mysql网站SQL注入防护探讨 摘要: 随着互联网+时代的到来,小型和中型企业网站雨后春笋,考虑成本和建站周期,一般都是基于Apache+PHP+Mysql架构。越来越多的网络访问通过Web界面进行操作,Web安全...

    Pangolin穿山甲SQL注入.zip

    首先,SQL注入是黑客常用的攻击手段之一,它通过在用户输入的数据中嵌入恶意的SQL代码,来操纵或破坏数据库系统。攻击者可以通过SQL注入获取敏感信息,如用户密码、个人信息,甚至完全控制整个数据库服务器。这种...

    .net防SQL注入程序

    1. 参数化查询:这是最常用也是最有效的防止SQL注入的方法。在.NET中,我们可以使用SqlCommand对象的Parameters集合来添加参数,确保用户输入的数据不会被解析为SQL命令的一部分。例如: ```csharp SqlCommand cmd ...

    SQL注入绕WAF小结

    本文将对几种常见的SQL注入绕过WAF的方法进行详细说明。 #### 二、SQL注入类型 1. **GET注入**:通常发生在URL查询参数中。 2. **POST注入**:发生在HTTP POST请求的数据体中。 3. **COOKIE注入**:利用Cookie中的...

Global site tag (gtag.js) - Google Analytics