sql注入定义、原理、攻击和防护

一、定义

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入攻击。

二、原理

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:

①   不当的类型处理;

②不安全的数据库配置;

③不合理的查询集处理;

④不当的错误处理;

⑤转义字符处理不合适;

⑥多个提交处理不当。

三、攻击

当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。相关的SQL注入可以通过测试工具pangolin进行。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在一些表单中,用户输入的内容直接用来构造动态sql命令,或者作为存储过程中的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。

四、防护

归纳一下,主要有以下几点:

1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式或限制长度;对单引号和双"-"进行转换等。

2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 22:26:45

sql注入定义、原理、攻击和防护的相关文章

SQL 注入、XSS 攻击、CSRF 攻击

SQL 注入.XSS 攻击.CSRF 攻击 SQL 注入 什么是 SQL 注入 SQL 注入,顾名思义就是通过注入 SQL 命令来进行攻击,更确切地说攻击者把 SQL 命令插入到 web 表单或请求参数的查询字符串里面提交给服务器,从而让服务器执行编写的恶意的 SQL 命令. 对于 web 开发者来说,SQL 注入已然是非常熟悉的,而且 SQL 注入已经生存了 10 多年,目前已经有很成熟的防范方法,所以目前的 web 应用都很少会存在漏洞允许进行 SQL 注入攻击. 除非是入门开发人员,在开发

防止sql注入。xss攻击 方法

//防止sql注入.xss攻击    /**     * 过滤参数     * @param string $str 接受的参数     * @return string     */    public function actionFilterWords($str)    {        $farr = array(            "/<(\\)(script|i?frame|style|html|body|title|link|meta|object|\\?|\\%)([^

防止SQL注入和XSS攻击Filter

nbsp;今天系统使用IBM的安全漏洞扫描工具扫描出一堆漏洞,下面的filter主要是解决防止SQL注入和XSS攻击 一个是Filter负责将请求的request包装一下. 一个是request包装器,负责过滤掉非法的字符. 将这个过滤器配置上以后,世界总算清净多了.. 代码如下: import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.serv

通过SQL注入实施DDOS攻击的方法

在这之前,我先介绍一下此方法的思路和原理,以便让大家更好地理解这种攻击方法.我们知道,如果一个网站存在sql注入漏洞,那么我们就能让网站数据库执行我们的sql语句,并得到相应的输出(当然,有些情况下是没有回显的).所以我们有了一个思路:构造一条足够复杂的sql语句,让数据库去执行,以此来消耗Web服务和数据库的资源,耗尽服务器资源,我们甚至也可以让数据库达到其最大连接数,让数据库不能再去回应其它合法用户的连接请求. 目前,整个思路已经很清晰了,我们可以开始构造复杂的sql语句了. sql为我们提

SQL注入的原理以及危害

SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击. 基础原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统. 根据相关技术原理,SQ

SQL注入的原理分析

注入攻击的本质,是把用户输入的数据当做代码执行. 注入的关键条件: 第一个是用户能够控制输入 第二个是原本程序要执行的代码,拼接了用户输入的数据然后进行执行 1.sql注入本质是什么 把用户输入当做代码执行 2.sql注入的条件 用户可控输入和原本程序要执行代码,拼接用户输入且当作SQL语句去执行 3.order by的作用及含义 order by 用于判断显示位,order by 原有的作用是对字段进行一个排序,在sql注入中用order by 来判断排序,order by 1就是对一个字段进

【渗透课程】第五篇-SQL注入的原理

哈哈哈,讲到注入了.我想给大家讲注入的原理.这个我们前面的前言篇就说过,所谓的SQL注入就是,绕过数据库验证机制直接执行SQL语句.怎么说呢,我们先讲一个概念吧! 网站和网页的区别 单纯的网页是静态的,html就是静态的,一些简单的网站(如某些引导页)只有网页和网页之间的跳转.而网站是动态的,是一个整体性的web应用程序,几乎所有的网站都要用到数据库.数据库我们怎么利用呢?例如某些博客站,cms站点.它的文章并不是存在网站目录里的,而是存在数据库里的,例如某些cms是通过后缀?id=321来调用

sql注入的原理是什么,怎么预防sql注入

为什么会产生sql注入: 主要原因,对用户输入的绝对信任,相信所有用户的输入都是可信的,没有对用户输入的语句进行过滤或者筛选,直接放到sql语句中进行拼接,从而导致了sql注入的产生 例如: <php? id = $_GET['id']; sql = "select * from tables where id=$id limit 0,1"; ....... ?> 如果是正常的id等于数值之类,是没有问题的,但是id如果被恶意更改或者更改,我们原本的逻辑就会出现一系列的问题

使用JDBC分别利用Statement和PreparedStatement来对MySQL数据库进行简单的增删改查以及SQL注入的原理

一.MySQL数据库的下载及安装 https://www.mysql.com/ 点击DOWNLOADS,拉到页面底部,找到MySQL Community(GPL)Downloads,点击 选择下图中的MySQL Community Server 选择想要的版本进行下载 之后的步骤,因为本人已经安装过MySQL数据库,而卸载重装会比较麻烦,卸载不干净会导致新的装不上,所以可以参考下面的博客,因为官网的改动,前面的部分已经与该博客不符,按照本人在上面的介绍寻找即可 https://blog.csdn