两个小函数让你的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%>

(0)

相关推荐

  • 两个小函数让你的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, &qu

  • ASP.NET防止SQL注入的方法示例

    本文实例讲述了ASP.NET防止SQL注入的方法.分享给大家供大家参考,具体如下: 最近接手别人一个项目,发现存在SQL注入漏洞,因为不想改太多代码,所以那种参数法防注入呢我就用不着了.只能用传统的笨一点的办法了. 1.新建Global.asax文件. 2.加入如下代码: void Application_BeginRequest(object sender, EventArgs e) { bool result = false; if (Request.RequestType.ToUpper(

  • 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终极防范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

  • 2007 10.30动易网站管理系统vote.asp页面存在SQL注入漏洞

    测试系统:         动易(PowerEasy CMS SP6 071030以下版本) 安全综述:        动易网站管理系统是一个采用 ASP 和 MSSQL 等其他多种数据库构建的高效网站内容管理解决方案产品. 漏洞描述:     vote.asp调用了动易组件PE_Site.ShowVote,此组件VoteOption参数过滤不严,导致可以进行mssql注入     但是其语句里面过滤了-- ;等字符,又是一个UPDATE形的注入,有一定的限制.但是其过滤的顺序不对.有导致mss

  • asp.net 防止SQL注入攻击

    只要做到以下三点,网站就会比较安全了而且维护也简单. 一.数据验证类 复制代码 代码如下: parameterCheck.cs public class parameterCheck{ public static bool isEmail(string emailString){ return System.Text.RegularExpressions.Regex.IsMatch(emailString, "['\\w_-]+(\\. ['\\w_-]+)*@['\\w_-]+(\\.['\\

  • asp.net下URL处理两个小工具方法

    有的时候我们要操作一个URL地址中查询参数,为了不破坏URL的原有结构,我们一般不能直接在URL的后面加&query=value,特别是我们的URL中有多个参数时,这种处理更麻烦. 下面两个小方法就是专门用来为一个URL添加一个查询参数或删除一个查询参数,这两个方法隐藏了原URL有无参数,是不是原来就有这个参数,有没有fragment(#anchor)这些细节和处理 /**//// <summary> /// Add a query to an URL. /// if the URL 

  • 跟老齐学Python之大话题小函数(2)

    上一讲和本讲的标题是"大话题小函数",所谓大话题,就是这些函数如果溯源,都会找到听起来更高大上的东西.这种思维方式绝对我坚定地继承了中华民族的优良传统的.自从天朝的臣民看到英国人开始踢足球,一直到现在所谓某国勃起了,都一直在试图论证足球起源于该朝的前前前朝的某国时代,并且还搬出了那时候的一个叫做高俅的球星来论证,当然了,勃起的某国是挡不住该国家队在世界杯征程上的阳痿,只能用高俅来意淫一番了.这种思维方式,我是坚定地继承,因为在我成长过程中,它一直被奉为优良传统.阿Q本来是姓赵的,和赵老

  • 跟老齐学Python之大话题小函数(1)

    开篇就要提到一个大的话题:编程范型.什么是编程范型?引用维基百科中的解释: 复制代码 代码如下: 编程范型或编程范式(英语:Programming paradigm),(范即模范之意,范式即模式.方法),是一类典型的编程风格,是指从事软件工程的一类典型的风格(可以对照方法学).如:函数式编程.程序编程.面向对象编程.指令式编程等等为不同的编程范型. 编程范型提供了(同时决定了)程序员对程序执行的看法.例如,在面向对象编程中,程序员认为程序是一系列相互作用的对象,而在函数式编程中一个程序会被看作是

随机推荐