网站地图 | 联系我们 | 咨询热线:0991-4811639
您现在的位置: 新疆二域设计网络公司 >> 网页设计学院 >> 网络编程 >> ASP编程 >> 正文
ASP防注入之解决方法--加强版

<%

''ASP防注入之解决方案
''特殊页面处理
''因为有些页通过流式传递(比如含有文件上传的表单)
''如果单一使用穷举Form对象的操作就会出错
''所以要把这些页面过滤出来,同时在页面中使用sql("检测的字串")才行
''垃圾猪zero@new57.com
''http://blog.csdn.net/cfaq



''将本页用include方法放在头部以让所有页都可以调用,比如include在conn.asp里
''如果有流式上传的页面请把该页加到表page中,以防form冲突


Dim N_no,N_noarray,req_Qs,req_F,N_i,N_dbstr,Conn,N_rs,N_userIP,N_thispage
N_userip = Request.ServerVariables("REMOTE_ADDR")
N_thispage = LCase(Request.ServerVariables("URL"))

N_no = "''|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" ''可以自己修改怀疑是注入操作的字串
N_noarray = split(LCase(N_no),"|")


Call DBopen()
Call N_check_Qs()
Call N_checkPage()
Call DBCLose()


''检测当前页是否是特殊页是就调用 N_check_form()
sub N_checkPage()

set N_rs = server.CreateObject("ADODB.RecordSet")
N_rs.open "select * from page where spcpage like ''%"&N_thispage&"%''",conn,1,1
if (N_rs.eof AND N_rs.Bof) then
Call N_check_form()
end if
N_rs.Close()
set N_rs = nothing

end sub



''检测给定字串
sub N_sql(agsql)
''这里是不记录数据库,如果要改请自己修改
N_check "CUS",req_Qs,"OTHER"
end sub

''检测Request.Form
sub N_check_form()
If Request.Form<>"" Then
For Each req_F In Request.Form
N_check req_F,Request.Form(req_F),"POST"
Next
end if
end sub

''检测Request.QueryString
sub N_check_Qs()
If Request.QueryString<>"" Then
For Each req_Qs In Request.QueryString
N_check req_Qs,Request.QueryString(req_Qs),"GET"
Next
end if
end sub

''检测
sub N_check(ag,agsql,sqltype)
For N_i=0 To Ubound(N_noarray)
If Instr(LCase(agsql),N_noarray(N_i))<>0 Then
call N_regsql(ag,agsql,sqltype)
Response.Write "MO"
end if
Next
end sub

''记录并停止输出
''ag 名称
''agsql 内容
''sqltype 类型
sub N_regsql(ag,agsql,sqltype)
if(sqltype<>"OTHER") then
Conn.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values(''"&N_userip&"'',''"&N_thispage&"'',''"&sqltype&"'',''"&ag&"'',''"&agsql&"'')")
end if
Response.Write "<Script Language=javascript>alert(''请不要在参数中包含非法字符尝试注入!'');</Script>"
Response.Write "<span style=''font-size:12px''>非法操作!系统做了如下记录↓<br>"
Response.Write "操作IP:"&N_userip&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&N_thispage&"<br>"
Response.Write "提交方式:"&sqltype&"<br>"
Response.Write "提交参数:"&ag&"<br>"
Response.Write "提交数据:"&agsql&"</span>"

Response.end
end sub


Sub DBopen()
N_dbstr="DBQ="+server.mappath("Sql.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Set Conn=Server.CreateObject("ADODB.CONNECTION")
Conn.open N_dbstr
end SUB


Sub DBCLose()
Conn.close
Set Conn = Nothing
End sub
%>

其他方法整理:

1、ASP程序连接 SQL Server 的账号不要使用sa,或任何属于Sysadmin组的账号,尽量避免应用服务有过高的权限,应使用一个db_owner权限的一般用户来连接数据库。

2、WEB应用服务器与DB服务器分别使用不同的机器来存放,并且之间最好通过防火墙来进行逻辑隔离,因为除了有程序在探测 sa 没密码的SQL Server,SQL Server 本身及大量的扩展存储过程也有被溢出攻击的危险。

3、数据库服务器尽量不要与公网进行连接,如果一定要直接提供公网的连接存储,应考虑使用一个非标准端口并限制IP地址来进行连接。

4、SA一定要设成强悍的密码,尤其是SQL Server 2000以前的版本,在默认安装Sql时sa账号没有密码,而一般管理员装完后也忘了或怕麻烦而不更改密码。

5、改掉缺省的Web虚拟路径,不要使用IIS装好后预设的<系统盘>\Inetpub\WWWRoot路径,否则利用前面叙述的另存为方式,很容易在该目录下动手脚。

6、将平时不使用的但功能强大的扩展存储过程删除。

7、使用网络和主机IDS来监控重要系统的运行状况。

8、随时注意是否有新的补丁需要补上,目前SQL2000最新的补本包为SP4。

9、尽量的利用ASP 或者 ASP.NET 在服务器端检查与限制输入变量的类型与长度,过滤掉不需要的内容。要注意的是这些检查不只是要放在前端,后端也要检测。 在前端利用Html Input 标签的MaxLength属性来限制输入长度,或是以JScript编写程序来限定文本域的长度,但是只要将该网页另存为,修改内容后(一般只要改写Form的Action属性以及Input的MaxLength属性),重新用浏览器打开更改过后的页面就可以躲过这些浏览器前端的检查。

10、使用容错语句,不要显示错误信息到前端,利用VBScript语法的On Error Resume Next来屏蔽SQL的出错提示,并搭配If Err.Number<>0 Then的错误处理方式,自行将错误重定向到适当的错误处理网页,如此系统将更稳固,且黑客也不容易透过错误信息来探知系统的内部运作方式。或者,也可以修改<系统盘>\Winnt\Help\iisHelp\common\500-100.asp预设网页,最简单的方式就是将它改名。例:


on error resume next
sql2="select * from dv_admin where username='"&ReqStr("username")&"'"
 

11、使用过滤和防注入函数来过滤掉一些特殊的字符,防注入函数示例:


'----------------------------------- ----------------------------
Function ReqNum ( StrName ) /* 数值型变量过滤 */
ReqNum = Request ( StrName )
if Not isNumeric ( ReqNum ) then
Response.Write "参数必须为数字型!" Response.End
End if
End Function
Function ReqStr ( StrName ) /*字符型和搜索型过滤 */
ReqStr = Replace ( Request(StrName), "'", "''" ) /* 用replace函数屏蔽单引号 */
End Function
以下三句SQL语句,说明一下调用方法:
1.SQL="select * from dv_admin where username=" & ReqNum("username")2.SQL="select * from
dv_admin where username ='" &

ReqStr(" username ") & "'" 3.SQL="select * from username where UserName like '%" & ReqStr
(" username ") & "%'"
12、若想更换SQL Server 的执行服务账号,则该帐号需要以下的权限:
Log On Locally
Log On as a Batch
Access this computer from the Network
Log on as service
Replace a process level token
Act as part of the operating system
Increase quotas
 

13、使用Microsoft基线安全性分析器(MBSA)来评估服务器的安全性,并按照它的建议来更改系统的设定。

MBSA 是一个扫描多种Microsoft产品的不安全配置的工具,包括SQL Server和Microsoft SQL Server 2000 Desktop Engine(MSDE 2000)。它可以在本地运行,也可以通过网络运行。

该工具针对下面问题对SQL Server安装进行检测:

(1) 过多的sysadmin固定服务器角色成员。   

(2) 授予sysadmin以外的其他角色创建CmdExec作业的权利。   

(3) 空的或简单的密码。   

(4) 脆弱的身份验证模式。   

(5) 授予管理员组过多的权利。   

(6) SQL Server数据目录中不正确的访问控制表(ACL)。   

(7) 安装文件中使用纯文本的sa密码。   

(8) 授予guest帐户过多的权利。   

(9) 在同时是域控制器的系统中运行SQL Server。   

(10) 所有人(Everyone)组的不正确配置,提供对特定注册表键的访问。   

(11) SQL Server 服务帐户的不正确配置。   

(12) 没有安装必要的服务包和安全更新。

作者:佚名 | 文章来源:本站原创 | 更新时间:2007-7-27 22:46:09

  • 上一篇文章:

  • 下一篇文章:
  • 相关文章:
    ASP实现网页打开任何类型文件都保存的方法
    伪静态页面在asp中实现的方法
    ASP入门教程:熟悉掌握ASP的语法和变量
    ASP+ACCESS+FLASH
    用ASP语言实现对SQL SERVER 数据库的操作…
    用asp管理sql server数据库…
    用Dreamweaver和ASP实现分页技术的参考
    在ASP中利用ADO显示Excel文件内容的函数
    ASP中轻松实现变量名-值变换
    在ASP中取得服务器网卡的MAC地址、DNS地址等网络信息

    色彩理念
    网页制作
    美工图形
    网络编程
    数 据 库
    网站运营
    ::最近更新::
    ·Utf-8和Gb2312乱码问题的终…
    ·ASP实现网页打开任何类型文…
    ·伪静态页面在asp中实现的方…
    ·ASP安全:ASP防注入解决方…
    ·UrlRewrite在ASP技术中的实…
    ·ASP入门教程:熟悉掌握ASP…
    ·ASP编程中FileUp 4.0 的属…
    ·防采集策略----网站生成静…
    ·实例详细讲解ASP生成静态H…
    ·ASP函数变量总结
    ·ASP实现邮件发送普通附件和…
    ·远程连接access数据库的方…
    ·在ASP中利用ADO显示Excel文…
    ·使用模板实现ASP代码与页面…
    ·购物车中数据的存放方式
    ::推荐阅读::
    ·远程连接access数据库的方…
    ·在ASP中取得服务器网卡的M…
    ·一条sql 语句搞定数据库分…
    ·一些不长见的ASP调用存储过…
    ·加速ASP程序的显示速度
    ·asp中对ip进行过滤限制函数

    关于我们 | 网站建设 | 服务帮助 | 联系我们 | 网页设计学院 | 实用工具 | 友情链接 | 新疆专题
    版权所有 © 2007 新疆二域设计网络公司 www.xjcncn.com All Rights Reserved
    网站建设总机:0991-4811639 传真:0991-4842803 ;咨询热线:13999201770. E-mail:xjcncn@gmail.com
    MSN :xjcncn@hotmail.com ; QQ:359312 ;地址:新疆乌鲁木齐市友好E时代公寓B座708 邮编:830000