您的位置:首页 > 数据库

浅谈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注入的防范就没有什么问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: