当前位置: 首页 > 图文教程 > 网络编程 > ASP > 两个小函数让你的ASP程序对SQL注入免疫!

ASP
ASP基础讲座(下)
解决IIS5 HTTP500内部错误
ASP 3.0高级编程(四十六)
ASP 3.0高级编程(四十五)
ASP 3.0高级编程(四十四)
ASP 3.0高级编程(四十三)
ASP 3.0高级编程(四十二)
ASP 3.0高级编程(四十一)
ASP 3.0高级编程(三十九)
ASP 3.0高级编程(三十八)
ASP 3.0高级编程(三十七)
ASP 3.0高级编程(三十六)
ASP 3.0高级编程(三十五)
ASP 3.0高级编程(三十四)
ASP 3.0高级编程(三十三)
ASP 3.0高级编程(三十二)
ASP 3.0高级编程(三十一)
ASP错误代码说明
jscript错误代码及相应解释大全
ASP错误处理

两个小函数让你的ASP程序对SQL注入免疫!


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 67 ::
收藏到网摘: n/a

Rem ## 长整数转换
Function toNum(s, default)
If IsNumeric(s) and s <> "" then
toNum = CLng(s)
Else
toNum = default
End If
End Function
Rem ## SQL 语句转换
Function toSql(str)
If IsNull(str) Then str = ""
toSql = replace(str, "''", "''''")
End Function
示例:
Dim sql
Dim strWhere, 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函数改为如下:
Function toSql(str)
If IsNull(str) Then str = ""
str = replace(str, chr(0), "")
toSql = replace(str, "''", "''''")
End Function
另注:
***********************************************************************
检测外部提交的函数
Function CheckUrlRefer()
Dim strLocalUrl, intUrlLen, strUrlRefer
strLocalUrl = "http://127.0.0.1"
intUrlLen = Len(strLocalUrl)
strUrlRefer = LCase(request.ServerVariables("HTTP_REFERER") & "")
''检测前一个页面是否来自 strLocalUrl
If Left(strUrlRefer, intUrlLen) = strLocalUrl Then
CheckUrlRefer = True
Else
CheckUrlRefer = False
End If
End Function
***********************************************************************
该函数可以帮助你抵挡外部的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
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
dim qs,errc,iii
qs=request.servervariables("query_string")
dim nothis(18)
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)="%"
errc=false
for iii= 0 to ubound(nothis)
if instr(qs,nothis(iii))<>0 then
errc=true
end if
next
if errc then
Response.Write("对不起,非法URL地址请求!")
response.end
end if
***************************************************************
当然这方法做得太“绝”了,但是我也是没有办法啊。这个方法是在网上看到的,运行于一个网站上,现在一切良好。为了安全我只能这样。我想只要有关SQL的敏感单词都进行过滤掉应该没有什么吧,当然像楼主的做到那一步是基本上可以了,可以修补一下用用。记得我最初用的是《SQL注入天书》上面提供的防范方法,后来才改用这个。
将我以前用的代码也帖出来供参考,大家有兴趣可以去百度或GOOGLE中搜索一下《SQL注入天书》了解
使用这个函数,对客户端提交来的数据进行验证。。。
<%
Function SafeRequest(ParaName,ParaType)
''--- 传入参数 ---
''ParaName:参数名称-字符型
''ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "参数" & ParaName & "必须为数字型!"
Response.end
End if
Else
ParaValue=replace(ParaValue,"''","''''")
End if
SafeRequest=ParaValue
End function%>