两个小函数让你的ASP程序对SQL注入免疫!
两个小函数让你的ASP程序对SQL注入免疫!
发布时间:2016-12-29 来源:查字典编辑
摘要:Rem##长整数转换FunctiontoNum(s,default)IfIsNumeric(s)ands""thentoNum=CLng(s...

Rem##长整数转换

FunctiontoNum(s,default)

IfIsNumeric(s)ands<>""then

toNum=CLng(s)

Else

toNum=default

EndIf

EndFunction

Rem##SQL语句转换

FunctiontoSql(str)

IfIsNull(str)Thenstr=""

toSql=replace(str,"''","''''")

EndFunction

示例:

Dimsql

DimstrWhere,strName,intAge

strName=toSql(request("user"))

intAge=toNum(request("age"),20)

sql="SELECT*FROM[USER]"&_

"WHERE[AGE]>"&strName&_

"AND[USERNAME]=''"&intAge&"''"

一般情况下,通过上面两个函数的过虑,可以杜绝网上的SQL注入攻击!如果你觉得有需要,可以加上对chr(0)的替换,将toSql函数改为如下:

FunctiontoSql(str)

IfIsNull(str)Thenstr=""

str=replace(str,chr(0),"")

toSql=replace(str,"''","''''")

EndFunction

另注:

***********************************************************************

检测外部提交的函数

FunctionCheckUrlRefer()

DimstrLocalUrl,intUrlLen,strUrlRefer

strLocalUrl="http://127.0.0.1"

intUrlLen=Len(strLocalUrl)

strUrlRefer=LCase(request.ServerVariables("HTTP_REFERER")&"")

''检测前一个页面是否来自strLocalUrl

IfLeft(strUrlRefer,intUrlLen)=strLocalUrlThen

CheckUrlRefer=True

Else

CheckUrlRefer=False

EndIf

EndFunction

***********************************************************************

该函数可以帮助你抵挡外部的SQL注入测试,只需要在页面的头部调用即可.

通过简单的两个小函数,让你的ASP程序更安全!

欢迎高手指正(请将绕过这两个函数的方法写出来)!

相关讨论页面:

http://community.csdn.net/Expert/TopicView.asp?id=3585010

http://community.csdn.net/Expert/TopicView.asp?id=3582230

http://community.csdn.net/Expert/topic/3589/3589480.xml?temp=.4866449

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

dimqs,errc,iii

qs=request.servervariables("query_string")

dimnothis(18)

nothis(0)="netuser"

nothis(1)="xp_cmdshell"

nothis(2)="/add"

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

nothis(4)="netlocalgroupadministrators"

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)="%"

errc=false

foriii=0toubound(nothis)

ifinstr(qs,nothis(iii))<>0then

errc=true

endif

next

iferrcthen

Response.Write("对不起,非法URL地址请求!")

response.end

endif

***************************************************************

当然这方法做得太“绝”了,但是我也是没有办法啊。这个方法是在网上看到的,运行于一个网站上,现在一切良好。为了安全我只能这样。我想只要有关SQL的敏感单词都进行过滤掉应该没有什么吧,当然像楼主的做到那一步是基本上可以了,可以修补一下用用。记得我最初用的是《SQL注入天书》上面提供的防范方法,后来才改用这个。

将我以前用的代码也帖出来供参考,大家有兴趣可以去百度或GOOGLE中搜索一下《SQL注入天书》了解

使用这个函数,对客户端提交来的数据进行验证。。。

<%

FunctionSafeRequest(ParaName,ParaType)

''---传入参数---

''ParaName:参数名称-字符型

''ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)

DimParaValue

ParaValue=Request(ParaName)

IfParaType=1then

IfnotisNumeric(ParaValue)then

Response.write"参数"&ParaName&"必须为数字型!"

Response.end

Endif

Else

ParaValue=replace(ParaValue,"''","''''")

Endif

SafeRequest=ParaValue

Endfunction%>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新ASP教程学习
热门ASP教程学习
编程开发子分类