浅谈SQL注入和防SQL注入方法
2009-08-06 17:03
155 查看
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.
当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造(或者影响)动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。
SQL注入是网站安全方面必须要考虑的一方面,SQL注入直接影响数据库,如果被注入,损失将会很大,可能所有的数据丢失,也可能一些重要信息泄露。所以,在建网站,和维护网站时候,要特别注意SQL注入,当然,还有很多其他的方法,还攻破网站。在此,就对SQL注入谈一点我的理解和防SQL注入方法。
他要想通过SQL注入来攻击你的网站,那首先他要找到你的网站那儿存在SQL语句漏洞,可以注入的地方,在通过编写SQL语句,就可以恶意来操作你的数据库了。他可能同过一些文本输入框,输入SQL语句来操作你的数据库,在就是直接修改定向URL的传递值,参数等。
他还需要获取你的数据库的表名,列名什么的,所以,可以通过权限的限制,加以保护,他所填加的SQL语句是通过传递一些字符串或者ID,或者其他类型的数据时增加的。所以,需要对文本框输入的数据和定向的URL中的字段进行检查和验证。比如过掉其中一些特殊字符,如引号(' '或" ")和分号(;)。还有就是检查是否含有关键字如update,insert,delete,select等。传递的ID是否为数字等方法还防SQL注入。
先猜表名
And (Select count(*) from 表名)<>0
猜列名
And (Select count(列名) from 表名)<>0
或者也可以这样
and exists (select * from 表名)
and exists (select 列名 from 表名)
返回正确的,那么写的表名或列名就是正确
防SQL注入,写函数判断传入ID是否为数字
bool saveRequest(type numID)
{ //type为传入类型,numID为传入值
bool ReturnWhat =false;
//判断是否为数字的方法很多。在此我写一种方法。
if (System.Text.RegularExpressions.Regex.IsMatch(numID, @"^[-]?/d+[.]?/d*$"))
{
ReturnWhat = true;
//传入的为数字,返回true.使用的是正则表达式来判断的。
}
}
判断和检查还有其他很多方法,只要注意到了,对于SQL注入的防范就没有什么问题了。
当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造(或者影响)动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。
SQL注入是网站安全方面必须要考虑的一方面,SQL注入直接影响数据库,如果被注入,损失将会很大,可能所有的数据丢失,也可能一些重要信息泄露。所以,在建网站,和维护网站时候,要特别注意SQL注入,当然,还有很多其他的方法,还攻破网站。在此,就对SQL注入谈一点我的理解和防SQL注入方法。
他要想通过SQL注入来攻击你的网站,那首先他要找到你的网站那儿存在SQL语句漏洞,可以注入的地方,在通过编写SQL语句,就可以恶意来操作你的数据库了。他可能同过一些文本输入框,输入SQL语句来操作你的数据库,在就是直接修改定向URL的传递值,参数等。
他还需要获取你的数据库的表名,列名什么的,所以,可以通过权限的限制,加以保护,他所填加的SQL语句是通过传递一些字符串或者ID,或者其他类型的数据时增加的。所以,需要对文本框输入的数据和定向的URL中的字段进行检查和验证。比如过掉其中一些特殊字符,如引号(' '或" ")和分号(;)。还有就是检查是否含有关键字如update,insert,delete,select等。传递的ID是否为数字等方法还防SQL注入。
先猜表名
And (Select count(*) from 表名)<>0
猜列名
And (Select count(列名) from 表名)<>0
或者也可以这样
and exists (select * from 表名)
and exists (select 列名 from 表名)
返回正确的,那么写的表名或列名就是正确
防SQL注入,写函数判断传入ID是否为数字
bool saveRequest(type numID)
{ //type为传入类型,numID为传入值
bool ReturnWhat =false;
//判断是否为数字的方法很多。在此我写一种方法。
if (System.Text.RegularExpressions.Regex.IsMatch(numID, @"^[-]?/d+[.]?/d*$"))
{
ReturnWhat = true;
//传入的为数字,返回true.使用的是正则表达式来判断的。
}
}
判断和检查还有其他很多方法,只要注意到了,对于SQL注入的防范就没有什么问题了。
相关文章推荐
- 浅谈mybatis中的#和$的区别 以及防止sql注入的方法
- 浅谈get型sql注入的手工注入方法
- 浅谈PHP的SQL注入与应对方法
- 探讨php中防止SQL注入最好的方法是什么
- 浅谈.NET中加密和解密的实现方法分享
- 探讨php中防止SQL注入最好的方法是什么
- 浅谈JS获取元素的N种方法及其动静态讨论
- 【Day43】PHP中用PDO查询Mysql来避免SQL注入风险的方法
- 浅谈JS中的常用选择器及属性、方法的调用
- 对sql注入和防止"or"="or"的修复方法!
- 防止sql注入的方法
- ASP.net防止SQL注入方法
- 浅谈使用继承的虚方法调用原理
- 浅谈Android应用保护(一):Android应用逆向的基本方法
- 浅谈如何设计更好的java方法
- 浅谈集合转换成数组的方法--toArray()与toArray(T[] a)
- 避免超时方法二 :优化数据输入,浅谈getchar,cin,scanf,fread
- Java浅谈 类与方法
- 浅谈白盒测试中的六种覆盖方法 1
- C#注释的一些使用方法浅谈