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

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%>

时间: 2024-10-09 03:38:41

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

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

sql|程序|函数|函数 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,

asp 实现对SQL注入危险字符进行重编码处理的函数_应用技巧

<% '****************************** '函数:CheckStr(byVal ChkStr) '参数:ChkStr,待验证的字符 '作者:阿里西西 '日期:2007/7/15 '描述:对SQL注入危险字符进行重编码处理 '示例:CheckStr("and 1=1 or select * from") '****************************** Function CheckStr(byVal ChkStr)  Dim Str:Str

asp.net 预防SQL注入攻击之我见_实用技巧

1. SQL注入攻击的本质:让客户端传递过去的字符串变成SQL语句,而且能够被执行. 2. 每个程序员都必须肩负起防止SQL注入攻击的责任. 说起防止SQL注入攻击,感觉很郁闷,这么多年了大家一直在讨论,也一直在争论,可是到了现在似乎还是没有定论.当不知道注入原理的时候会觉得很神奇,怎么就被注入了呢?会觉得很难预防.但是当知道了注入原理之后预防不就是很简单的事情了吗? 第一次听说SQL注入攻击的时候还是在2004年(好像得知的比较晚),那是还是在写asp呢.在一次写代码的时候,有同事问我,你的这

ASP.NET优化:Sql注入和Html注入的黑帽SEO

黑帽(black hat)SEO主要是指采取"不怎么道德"(暂时就这么形容吧!)的方式进行搜索引擎优化. 1. 注入攻击,包括Sql注入和Html注入.我经常能看到对Sql注入防范的谈论,但对于Html注入,很多人并没有引起足够的重视.为了展示Html注入的效果,我们模仿了一个常见的留言本功能. 首先,在页面声明中添加两个属性设置EnableEventValidation="false" ValidateRequest="false" ,这很关键

ASP网页防SQL注入的代码

近日笔者的小站遭受到SQL入侵,于是上网搜索了一些相关防SQL注入的方法. 版本颇多,有人觉得这段好用,有人以为那段才行,因此综合整理了一下,包含以下几种: 以下为引用的内容:<% Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx '---定义部份 头------ Fy_Cl = 1 '处理方式:1=提示信息,2=转向页面,3=先提示再转向 Fy_Zx = "index.Asp" '出错时转向的页面 '---定义部份 尾------ O

asp.net防sql注入多种方法与实例代码应用(1/4)

asp教程.net防sql注入多种方法与实例代码应用 清除Request方法的注入问题         static string[] get_sql_a()         {             string Sql_1 = "exec|insert+|select+|delete|update|count|master+|truncate|char|declare|drop+|drop+table|creat+|creat+table";             string

asp终极防范SQL注入漏洞

下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通. 注意要对所有的request对象进行过滤:包括 request.cookie, request.ServerVariables 等等容易被忽视的对象: 复制代码 代码如下: function killn(byval s1) '过滤数值型参数 if not isnumeric(s1) then killn=0 else if s1<0 or s1>2147483647 then killn=0 else killn=cl

asp终极防范SQL注入漏洞_应用技巧

下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通. 注意要对所有的request对象进行过滤:包括 request.cookie, request.ServerVariables 等等容易被忽视的对象: 复制代码 代码如下: function killn(byval s1) '过滤数值型参数 if not isnumeric(s1) then killn=0 else if s1<0 or s1>2147483647 then killn=0 else killn=cl

ASP基础教程之ASP程序对Cookie的处理

cookie|程序|基础教程 cookie常用来对用户进行识别. 实例: <%dim numvisitsresponse.cookies("NumVisits").Expires=date+365 numvisits=request.cookies("NumVisits")if numvisits="" then   response.cookies("NumVisits")=1   response.write(&qu