许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码(一般是在浏览器地址栏进行,通过正常的www端口访问),根据程序返回的结果,获得某些想得知的数据,这就是所谓的SQL Injection,即SQL注入。好,先让我们检查下自己的网站是否会被SQL注入吧,方法如下: 我们以下以:http://localhost/login.asp?password=yy(这个地址是假想的,你可以用自己的网站测试)为例,简单演示下网页是怎样被SQL注入的。通常login.asp中SQL语句原貌大致如下:Select * From 表名 Where 密码='yy',如果没有对传入的参数做检查就可以把1' and 密码<>'1做为password的参数传入:http://localhost/login.asp?password=1' and 密码<>'1,。这时SQL语句就变成Select * From 表名 Where 密码='1' and 密码<>'1',显然SQL语句执行后的结果是不一样的。 如果检查到自己的网站可以被注入,呵呵,你就有麻烦了,很可能你的网站已被别人深入的“了解”了一遍。但也不用太担心,现在网上防止SQL注入的ASP代码有很多,现在就介绍网上比较流行的一个简单实用的防SQL注入ASP程序给大家,只要简单的把它Include进你的ASP页面就OK了。 将以下代码拷贝,另存为Fy_SqlX.Asp: Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx '---定义部份头------ Fy_Cl = 1 '处理方式:1=提示信息,2=转向页面,3=先提示再转向 Fy_Zx = "Error.Asp" '出错时转向的页面 '---定义部份尾------ On Error Resume Next Fy_Url=Request.ServerVariables("QUERY_STRING") Fy_a=split(Fy_Url,"&") redim Fy_Cs(ubound(Fy_a)) On Error Resume Next for Fy_x=0 to ubound(Fy_a) Fy_Cs(Fy_x) = left(Fy_a(Fy_x), instr(Fy_a(Fy_x), "=")-1) Next For Fy_x=0 to ubound(Fy_Cs) If Fy_Cs(Fy_x)<>"" Then If Instr(LCase(Request(Fy_Cs(Fy_x))), "'")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))), "and")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))), "select")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))), "update")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))), "chr")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))), "delete")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))), ";")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))), "insert")<>0 Then Select Case Fy_Cl Case "1" Response.Write "" Case "2" Response.Write "" Case "3" Response.Write "" End Select Response.End End If End If Next 以上的代码简单但很实用,你只要先对Fy_Cl(出错提示方法),Fy_Zx(出错后转向的页面)两个参数进行设置好, include 进ASP页面就OK了。还可以修改部分错误提示信息以自用。