ASP安全配置不完全手册

安全

——从asp程序编写到服务器配置

ASP全称Active Server Pages,是微软推出的用来取代CGI(Common Gateway Interface)的动态服务器网页技术。由于ASP比较简单易学,又有微软这个强大后台的支持,所以应用比较广泛,相对来说发现的缺陷和针对各程序的漏洞也比较多。ASP可运行的服务器端平台包括:WinNT、Win2k、WinXP和Win2003,在Win98环境下装上PWS4.0也可以运行。现在我们就针对Win2k和Win2003这两个系统来谈谈ASP的安全配置。

ASP程序安全篇:
在做安全配置前,我们先了解一下入侵者的攻击手法。现在很流行注入攻击,所谓注入攻击,就是利用提交特殊地址将ASP中引用的正常SQL语句和入侵者所需要的SQL语句一并执行,使入侵者达到入侵的目的。现在更是有一些脚本注入工具发布,使菜鸟也可以轻松完成对ASP的注入攻击。那么我们先来了解一下这些工具是怎样注入的。
首先,入侵者会对一个网站确定可不可以进行注入,假设一篇文章的地址为:http://www.scccn.com/news.asp?id=1一般会以提交两个地址来测试,如:
http://www.scccn.com/news.asp?id=1 and 1=1
http://www.scccn.com/news.asp?id=1 and 1=2
第一个地址后面加了 and 1=1,构成的SQL语句也就变为了:Select * from 表单名 where id=1 and 1=1这句话要成立就必须and前后语句都成立。那么前面的文章地址是可以访问的,后面的1=1也是客观成立的,那么第一个地址就可以正常显示;相反1=2是显然不成立的,关键就看这步了,如果提交and 1=2页面还是正常显示说明他并没有将and 1=2写入SQL语句,此站也就不存在注入漏洞;但如果提交and 1=2之后返回了错误页面则说明此站点将后面的语句带入了SQL语句并执行了,也就说明他可以进行SQL注入。(注:如果地址后面跟的是news.asp?id='1'就得变为news.asp?id=1' and '1'='1来补全引号了)
那么,知道可以注入后入侵者可以做什么呢?
这里就简单的说一下,比如提交这样的地址:
http://www.scccn.com/news.asp?id=1 and exists (select * from 表名 where 列名=数据)
根据返回的正确或错误页面来判断猜的表名和列名是否正确,具体实现时是先猜表名再猜列名。当猜出表名和列名之后还可以用ASC和MID函数来猜出各列的数据。MID函数的格式为:mid(变量名,第几个字符开始读取,读取几个字符),比如:mid(pwd,1,2)就可以从变量pwd中的第一位开始读取两位的字符。ASC函数的格式为:ASC("字符串"),如:asc("a")就可以读出字母a的ASCII码了。那么实际应用的时候就可以写为:asc(mid(pwd,1,1))这样读取的就是pwd列的第一个字符的ASCII码,提交: asc(mid(pwd,1,1))>97以返回的页面是否为正确页面来判断pwd列的第一个字符的ASCII码是否大于97(a的ASCII码),如果正确就再试是否小于122(z的ASCII码)……这样慢慢缩小字符的ASCII码的范围,猜到真实的ASCII码也只是时间的问题。一位一位的猜就可以得到数据库中的用户名和密码了。还有一种ASP验证缺陷——就是用户名和密码都输'or '1'='1,构造SQL语句Select * form 表单名 where username='' or '1'='1' and pwd='' or '1'='1'就可以达到绕过密码验证的目的。
说了那么多,其实防范的方法很简单,我们把特殊字符(如and、or、'、")都禁止提交就可以防止注入了。ASP传输数据分为get和post两种, get是通过将数据添加到URL后提交的方式,post则是利用邮寄信息数据字段将数据传送到服务器。
那么,我们先来看看如何将get方式提交数据中的特殊字符过滤。首先要知道,IIS是以字符串的形式将get请求传给asp.dll的,在将数据传递给Request.QueryString之后,asp解析器会解析出Request.QueryString的信息,然后跟据"&"来分出各个数组内的数据。现在我们要让get方式不能提交以下字符:
'、and、exec、insert、select、delete、update、count、*、%、chr、mid、master、truncate、char、declare
那么,防止get方式注入的代码就如下:
<%
dim sql_leach,sql_leach_0,Sql_DATA
sql_leach = "',and,exec,insert,select,delete,update,count,*,%,chr,mid,master,truncate,char,declare"
sql_leach_0 = split(sql_leach,",")

If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(sql_leach_0)
if instr(Request.QueryString(SQL_Get),sql_leach_0(Sql_DATA))>0 Then
Response.Write "请不要尝试进行SQL注入!"
Response.end
end if
next
Next
End If
%>
其中,变量sql_leach中的字符串就是指定过滤的字符,以","隔开。
接着过滤post提交方式的注入,我们可以看到,request.form也是以数组形式存在的,只要对它再进行一次循环判断就可以了。防止以post方式注入的ASP代码如下:
<%
If Request.Form<>"" Then
For Each Sql_Post In Request.Form
For SQL_Data=0 To Ubound(sql_leach_0)
if instr(Request.Form(Sql_Post),sql_leach_0(Sql_DATA))>0 Then
Response.Write "请不要尝试进行SQL注入!"
Response.end
end if
next
next
end if
%>
这样,get和post注入都被禁止了。
另外就是数据库的问题,首先现在很流行的用*.asp命名数据库已经没什么意义了,因为可以用下载软件来下载;在数据库名前加#的作用也不大,虽然访问时浏览器只访问#前面的内容,但是如果将#用其unicode表达法(%23)替换掉就可以访问了。既然这样,那么我们禁止入侵者暴库就可以了。一般暴数据库的方法,是将读取数据库的文件名(如conn.asp)前的"/"替换为"%5c"("\"的unicode表达法)这样就可以使ASP将%5c解释为访问网站根目录,而实际是数据库不在指定位置,找不到数据库,再将IE设置为"显示友好的HTTP错误信息"的情况下自然就暴出了数据库的路径。
防范的方法也比较简单,就是让ASP程序即使在出错的情况下也不报错直接执行下一步就可以了。在ASP文件中加这么一句:on error resume next就OK了。
还有几点要注意的:
1.数据库命名长些并尽量放在网站根目录下,数据库的表名和字段名尽量不合常规;2.保存敏感信息(如用户和密码)的数据库尽量和在前台页面引用的数据库分开(如果用新的暴库方法由前台页面暴出了数据库,那么入侵者也得不到有价值的信息);3.后台的目录名和登陆页面的名字要改的不寻常些,千万不可出现admin或者login之类的字符,以免被注入软件扫描到后台。4.如果前台或后台有上传文件的功能,切记不能有任何其他功能直接的或间接的拥有更改文件名的权限。这样的多重保障就更加安全些了。

ASP服务器安全配置篇(针对win2k和win2003):
我们从裸机说起——
首先,拔掉网线,按需求分区之后将所有盘格式化为NTFS,在D盘安装系统。系统装完之后立刻做一个裸系统的ghost备份,以防后面配置的过程中出意外。
先把驱动都装上是必要的。之后先装防火墙,选择一款好的防火墙是很重要的。能买硬件防火墙最好,推荐的选择:cisco pix系列、天融信 NGFW系列、冰之眼(入侵检测系统)。没有硬件防火墙的情况下,使用软件防火墙,推荐:Blackice(我个人的最爱)、Checkpoint(以色列国家级防火墙)、ZoneAlarm(不太熟悉,但口碑不错),虽然比较喜欢天网防火墙,但是不推荐服务器用天网。
装完防火墙装杀毒软件,推荐:KV江民杀毒软件(好东西)、诺顿(虽然好,但比较霸道)、卡巴斯基(听说比较耗内存,但对病毒疗效狂好)。
开始安装各种需要的软件,如果是2003系统,别忘了装IIS。以上所有软件都装在一个非系统盘的指定盘里。
下面开始给系统打补丁,首先用手头有的光盘给2k打上SP4或给2003打上SP1。在本地操作的情况下将能打系统和软件的补丁都打上。之后,在确认防火墙和杀毒软件都设置好的情况下插上网线,开始window update,并升级杀毒软件至最新病毒库。打完所有的系统和软件的补丁之后,将网线拔掉,把所有临时文件和系统补丁留下的卸载文件全部删除,如果觉得占用空间太多还可以把%systemroot%\System32\dllcache\下的所有文件删除(系统备份文件),这将使最后的ghost备份文件体积比较小。然后再次用ghost备份系统。
之后删除不安全的组件,需要将WScript.Shell, WScript.Network, Shell.application删除掉。在cmd下分别输入(以2k为例,2003路经为D:\windows):
regsvr32/u D:\WINNT\System32\wshom.ocx
del D:\WINNT\System32\wshom.ocx
重新启动,就OK了。另外入侵者可以利用getobject("WINNT")获得用户和进程的列表,可以将Workstation服务禁用作为防范措施。
设置权限是必要的。首先,确定IIS里要建立几个站点,之后为每个站点建立一个用户。在IIS站点的目录安全性里选择让这个用户作为匿名访问的帐户。再设置所有分区都禁止这个用户访问,而在站点对应的文件夹设置允许此用户访问。这样即使站点被入侵,入侵者也拿不到服务器的shell。
一切做好之后用ghost再次备份,并将做好的备份文件放在与服务器不在同一局域网的机器上或相对安全的地方。插上网线,服务器就可以安全的正常工作了。之后可以在每次服务器重起时还原一次系统,这都是后话了。

好了,基本上就这么多了,以上说的可能不太完全,仅作参考之用,不足之处还请高手多多补充。

时间: 2024-08-03 13:59:21

ASP安全配置不完全手册的相关文章

《圣殿祭司的ASP.NET4.0专家技术手册》----1-1 ASP.NET平台的三分天下

1-1 ASP.NET平台的三分天下 圣殿祭司的ASP.NET4.0专家技术手册 如果访问微软www.asp.net网站,会发现ASP.NET技术目前有3位成员:Web Form.MVC和Web Pages,如图1-1所示.它们各有不同的定位与特色,彼此的开发方式也不相同.目前,使用人数与市场占有率最高的仍是Web Form,而MVC近两年有不少技术玩家和项目采用,至于Web Pages,则是另外的Web Matrix开发工具预定的网页开发技术,它走更易于使用的开发路线. 你心里可能有疑问:"为

VS2010+Silverlight4中asp.net配置无法连接数据库的问题

当我使用vs2010+Silverlight4 想体验下Silverlight的角色管理的功能时,却发生在asp.net 中无法 连接数据库的问题,搞了我半天的时间才整明白,现在分享下我的解决方法: 1.首先确保你的机器安装有SQL Server 2005 Express 或者SQL Server 2008 Express,我在第一次安 装vs2010的时候SQL Server 2008 Express没安装上去,然后重新安装才安装上去. 2.使用aspnet_regsql.exe 来注册一个数

《圣殿祭司的ASP.NET4.0专家技术手册》---- 1-6 VS 2010 SP1安装与三个扩展管理工具

1-6 VS 2010 SP1安装与三个扩展管理工具 圣殿祭司的ASP.NET4.0专家技术手册 2011年3月,微软推出VS 2010 SP1软件补丁,里面包含许多新功能与问题修正,其中与Web开发相关新功能有: IIS 7.5 Express精简版网页服务器的支持(IIS 7.5 Express需额外下载安装): SQL Server CE 4.0的支持(SQL Server CE 4.0需额外下载安装): Razor语法支持: 可部署的依赖性支持(Deployable dependenci

《圣殿祭司的ASP.NET4.0专家技术手册》----1-2 .NET 4.0平台新功能概览

1-2 .NET 4.0平台新功能概览 圣殿祭司的ASP.NET4.0专家技术手册 .NET平台版本从1.0.1.1.2.0.3.0.3.5不断演进.最新4.0版的重要改进如下: NET Framework 4.0 Visual C# 2010 Visual Basic 2010 Visual F# 2010(或F# 2.0) 新的CLR 4.0运行时 DLR动态语言运行时(Dynamic Language Runtime) ASP.NET 4.0 ASP.NET MVC 2.0(最新版为4.0

《圣殿祭司的ASP.NET4.0专家技术手册》----2-4 DLR动态执行环境

2-4 DLR动态执行环境 圣殿祭司的ASP.NET4.0专家技术手册 在.NET 4.0平台下有3个重要动态角色:①dynamic动态类型.②IronPython与IronRuby动态语言.③DLR(Dynamic Language Runtime)动态执行环境,前两者之所以能够存在,在于DLR的创建,DLR克服了原本.NET平台无法支持动态语言的限制,在DLR基础架构的支持下,便能衍生出动态类型.动态语言的诸多应用,如图2-2所示. 微软列举DLR的好处有: 简化将动态语言移植到.NET F

《圣殿祭司的ASP.NET4.0专家技术手册》----1-3 ASP.NET 4.0技术概览

1-3 ASP.NET 4.0技术概览 圣殿祭司的ASP.NET4.0专家技术手册 1-3 ASP.NET 4.0技术概览ASP.NET 4.0技术概览 ASP.NET 4.0是在ASP.NET 2.0及3.5基础上,添加了一些新技术,一方面保持适当幅度创新,另一方面也保持对旧版本的兼容与延续性.例如,图表控件的内建.Silverlight 5.ASP.NET AJAX 4.0.jQuery.C# 4.0.VB 10.F#.IronPython.IronRuby.LINQ.Entity Fram

《圣殿祭司的ASP.NET4.0专家技术手册》----2-3 C# 4.0静态基础融入动态能力

2-3 C# 4.0静态基础融入动态能力 圣殿祭司的ASP.NET4.0专家技术手册 在了解静态与动态语言后,大家直觉上可能会以为这是二元的对立,非黑即白,不是静态语言,就是动态语言.但您是否想过静态和动态之间是可以兼具或混合的可能性?例如,静态语言为获取动态语言优点,而融入了一些动态语言的功能,然后又保持静态语言的优势,如类型安全.优化.高效率. 是的,.NET 4.0正是以这个方向去改造,在原本C#.VB静态语言基础上,加上动态语言的一些特性与优势,这样就达到以静态为主,动态为辅之目的,让C

《圣殿祭司的ASP.NET4.0专家技术手册》----1-8 .NET 4.0内建的图表控件

1-8 .NET 4.0内建的图表控件 圣殿祭司的ASP.NET4.0专家技术手册 以往ASP.NET 3.5要使用图表控件,必须再另外下载安装,但到了.NET 4.0,图表控件已变成内建,在ASP.NET 4.0项目中就可以直接使用,如图1-17所示,省去了很多麻烦. .NET 4.0图表控件联机帮助文件: http://msdn.microsoft.com/zh-tw/library/dd456632.aspx .NET 3.5图表控件范例程序: http://goo.gl/Pz4I1 .N

《圣殿祭司的ASP.NET4.0专家技术手册》----2-1 C# 4.0语言新功能

2-1 C# 4.0语言新功能 圣殿祭司的ASP.NET4.0专家技术手册 C# 4.0新增的语言功能,除了命名实参和可选实参(VB早已支持)较为常用,其他功能几乎是从动态基础衍生出来的便利性或灵活性,新功能如下: 命名实参和可选实参(Named and Optional Arguments): Dynamic动态类型(Dynamic Type): 共变量与反变量(Covariance and Contravariance): Office可程序性支持(Office Programmabilit