以下从一个测试网站ceshi开始了解一下SQL注入(注:本网站实属测试网站,利用ceshi来代替网站的网址)。
在网站首页上,可以点击其中任意一个链接,地址为:http://ceshi/look.asp?id=10,在这个地址后面加上单引号“’”,服务器会返回下面的错误提示:

从这个错误提示能看出下面几点:
(1)网站使用的是Access数据库,是通过ODBC而不是通过JET引擎连接数据库。
(2)该SQL语句所查询的表中有一名为ID的字段。
从上面的实例可以知道,SQL注入的原理就是从客户端提交特殊的代码,从而收集程序及服务器的信息,取想到得到的资料。所以这种问题在网络身份验证中普遍存在。
下面利用3种方法来讲解一下如何防止SQL注入:
2.4.1 利用instr()函数防止SQL注入攻击
<%If instr(Request("id")," ")>0 or instr(Request("id"),"'")>0 then
response.redirect "index.asp"
end if%>
读者要注意instr(Request("id")," ")>0这段代码,它和空格进行比较,只要有这句话,那些注入者使用的and 1 = 1 就起不了作用。
2.4.2 禁止通过FORM表单进行SQL注入攻击 在用户验证过程中通过FORM表单的用户名和密码域进行攻击,防止其方法可以在提交的FORM表单中过滤掉常用的SQL中的关键字。
|