转载:我对SQL注入的认识
1.什么是sql注入呢?
所谓 SQL注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
2.SQL注入攻击原理。
SQL注入是目前比较常见的针对数据库的一种攻击方式。在这种攻击方式中,攻击者会将一些恶意代码插入到字符串中。然后会通过各种手段将该字符串传递到SQLServer数据库的实例中进行分析和执行。只要这个恶意代码符合SQL语句的规则,则在代码编译与执行的时候,就不会被系统所发现
3.SQL注入式攻击的主要形式
一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。
二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。
注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“—”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不背编译与执行。
4.什么时候最易受到注入攻击
当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。相关的SQL注入可以通过测试工具pangolin进行。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。
5.如何防止SQL注入
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFTSCAN等。
6.SQL注入的一般步骤
1.判断环境,寻找注入点,判断数据库类型
2.根据注入参数类型,在脑海中重构SQL语句的原貌,按参数类型主要分为下面三种:
(A)ID=1这类注入的参数是数字型,SQL语句原貌大致如下:
Select*from表名 where字段=1
注入的参数为ID=1 And [查询条件],即是生成语句:
Select*from表名 where字段=1 And [查询条件]
(B)Class=大家这类注入的参数是字符型,SQL语句原貌大致概如下:
Select*from 表名 where字段=’大家’
注入的参数为Class=大家’ and [查询条件] and ‘’=’,即是生成语句: Select * from表名 where字段=’大家’ and [查询条件] and‘’=’’ copy;
搜索时没过滤参数的,如keyword=关键字,SQL语句原貌大致如下: Select * from 表名 where字段like’%关键字%’
注入的参数为keyword=’ and [查询条件] and ‘%25’=’,即是生成语句: Select * from表名 where字段like ’%’and [查询条件] and ‘%’=’%’
3.将查询条件替换成SQL语句,猜解表名,例如:
ID=1 And (Select Count(*) from Admin)>=0
如果页面就与ID=1的相同,说明附加条件成立,即表Admin存在,反之,即不存在。如此循环,直至猜到表名为止。
表名猜出来后,将Count(*)替换成Count(字段名),用同样的原理猜解字段名。
4.在表名和列名猜解成功后,再使用SQL语句,得出字段的值。
说到这,想必大家心里都很清楚SQL注入的重要性了吧,俗话说得好,害人之心不可有,防人之心不可无!在做软件的时候应用SQL注入的方法帮助我们解决这些不必要的麻烦!不要给别人留任何的机会!我对SQL注入的认识