网上找的所谓过滤

2004/12 09 05:12
<%@ LANGUAGE = VBScript CodePage = 936%>

<%

Option Explicit

Response.Buffer 
= true

dim GQ,Checki,errc

GQ
=request.servervariables("HTTP_USER_AGENT")



errc
=false

dim nothis(19

nothis(
0)="net user" 

nothis(
1)="xp_cmdshell" 

nothis(
2)="/add" 

nothis(
3)="exec%20master.dbo.xp_cmdshell" 

nothis(
4)="net localgroup administrators" 

nothis(
5)="select" 

nothis(
6)="count" 

nothis(
7)="asc" 

nothis(
8)="char" 

nothis(
9)="mid" 

nothis(
10)="'" 

nothis(
11)=":" 

nothis(
12)="""" 

nothis(
13)="insert" 

nothis(
14)="delete" 

nothis(
15)="drop" 

nothis(
16)="truncate" 

nothis(
17)="from" 

nothis(
18)="%" 

nothis(
19)="declare"

for checki= 0 to ubound(nothis)

  
'--------------Get Filter

  if instr(lcase(GQ),nothis(checki))<>0 then

   errc
=true

   
exit for

  
end if



next

if errc then

response.
end

end if

Dim Startime

Dim Dvbbs,template

Dim SqlNowString,Conn

'定义数据库类别,1为SQL数据库,0为Access数据库

Const IsSqlDataBase = 1

'论坛缓存名称,如果一个站点有多个论坛请更改成不同名称

Const Forum_CacheName = "aspsky"

'定义运行模式,测试的时候设置1,正常运行的时候设置为0,不输出错误信息有利于安全,

Const IsDeBug = 1

Startime 
= Timer()

Dim MyBoardOnline

Dim Db

Set Dvbbs = New Cls_Forum

Set MyBoardOnline=new Cls_UserOnlne 

Set template = New cls_templates

If IsSqlDataBase = 1 Then

    SqlNowString 
= "GetDate()"

Else

    SqlNowString 
= "Now()"

End If

Sub ConnectionDatabase

    
Dim ConnStr

    
If IsSqlDataBase = 1 Then

        
'sql数据库连接参数:数据库名、用户密码、用户名、连接名(本地用local,外地用IP)

        Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName

        SqlDatabaseName 
= "dvbbs7"

        SqlPassword = ""

        SqlUsername = "dvbbs"

        SqlLocalName = "(local)"

        ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"

    Else

        
'免费用户第一次使用请修改本处数据库地址并相应修改data目录中数据库名称,如将dvbbs6.mdb修改为dvbbs6.asp

        Db = "data/dvbbs7.mdb"

        ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db)

    
End If

    
On Error Resume Next

    
Set conn = Server.CreateObject("ADODB.Connection")

    conn.open ConnStr

    
If Err Then

        err.Clear

        
Set Conn = Nothing

        Response.Write 
"数据库连接出错,请检查连接字串。"'注释,需要把这几个字翻译成英文。

        Response.End

    
End If

End Sub

%
>

原文件是动网SQL版本的conn.asp文件,是用来与sql连接的文件,朋友让我看看,是否做了过滤,一开始没懂,仔细一看,他所做的过滤是对"HTTP_USER_AGENT"接受到的字符进行检测,检测到则报错。

作用不言而喻,在程序出现了sql漏洞的时候,还能做到不让对方进行xp_cmdshell的操作,不过作用真的不是很大,只要在sql服务器上稍微做一下权限控制,或者删除xp_cmdshell的存储过程就可以了,实在有够多余,不过还是可以借鉴一下的。

--转载请注明: http://www.jamesying.com/2004/12/09/%e7%bd%91%e4%b8%8a%e6%89%be%e7%9a%84%e6%89%80%e8%b0%93%e8%bf%87%e6%bb%a4/

发表回复

欢迎回来 (打开)

(必填)