【摘要】 ASP 是目前在 IIS 编程中使用最为广泛的开发环境, 它的入门非常容易, 几乎在每个网站上都或多或少使用了该技术。本文通过介绍常见的提供 ASP 服务的操作系统的漏洞和 ASP 程序的漏洞, 详细阐述 ASP 网站安全问题, 并给出了相应的解决方法和建议。 碧森尤信 在 Web 数据库访问的多种技术中, ASP 以其开发周期短、存取数据库方便、执行效率高而成为众多网站程序员的首选开发技术。因此 ASP 网站的安全性成为不容忽视的重要问题。本文旨在分析 ASP 执行过程及在网络安全上的优点, 指出提供 ASP 服务的操作系统的漏洞和 ASP 程序的漏洞及解决方法, 并给出安全性建议。
ASP 脚本是使用 VBScript, JavaScript 或 JScript 脚本语言编写的, 与标准 HTML 页面混合在一起的脚本所构成的文本格式的文件。当 Web 浏览器向 Web 服务器发出 HTTP 请求, 访问 ASP 文件时, Web 服务器判断出该请求的 ASP 文件含有“<%”和“%>”后,调用 ASP.DLL, 进行语法分析、解释执行, 然后将最终结果转换成为标准的 HTML 格式内容, 返回给 Web 浏览器, 由 Web 浏览器显示。这是一次完整的 ASP 执行过程。
ASP 在网络安全方面主要有以下优点:
一是不泄漏源代码
相比客户端执行的 JavaScript 程序,ASP在网络安全上的优点之一是用户不能看到 ASP 源程序。因为传到浏览器端的只是转换成 HTML 语言的结果;
二是支持虚拟目录
虚拟目录的建立在网络安全上有重要意义。因为虚拟目录方式可以隐藏站点目录结构。而且网站源代码不需要任何修改, 就可以搬迁到另一台服务器上正常运行。另外, 管理员可以对虚拟目录设置不同的操作权限, 从而方便管理, 并且提高程序的安全性。然而, ASP 也给 web 站点带来了许多安全隐患, 作为网站, 数据库存在的基石, 操作系统的安全也是至关重要的。
1 权限管理
权限管理是保证 Web 站点正常运行的最重要的方面, IIS 的权限管理是与 Windows 紧密相关的。主要包括以下几个方面:
1.1 Windows 的权限管理
(1)NTFS 的权限管理 作为一个 Web 服务器, 所有的磁盘分区都应该是 NTFS 格式的。使用 NTFS 文件系统, 只将最有限、最合适的 NTFS 权限分配给用户。
(2)账号管理 对于 Windows 用户也要严格控制, 应尽可能地停用 Guest 账号, 尽量不使用管理员身份登录系统, 必要时可以在组策略中对用户密码进行限制。
(3)共享权限的修改在 windows2000 系统默认情况下, 每建立一个新的共享, Everyone 用户就享有“完全控制”的共享权限, 因此, 在建立新的共享后应该立即修改 Everyone 的缺省权限, 至少把“完全控制”去掉。
1.2 IIS 的权限管
(1)设置文件夹和文件的访问权限安放在 NTFS 文件系统上的文件夹和文件, 一方面要对其权限加以控制, 对不同的组和用户设置不同的权限; 另外, 还可以利用 NTFS 的审核功能对某些特定组的成员读、写文件等方面进行审核, 通过监视“文件访问”、“用户对象的使用”等动作, 来有效地防范非法用户。具体方法: 选择“开始”选单→“程序”→启动“域用户管理器”→选择“规则”选项卡下的“审核”选项→设置“审核规则”。
(2)在设置 Web 服务器权限时, 必须遵循下列原则: 对包含.asp 文件和其它需要“执行”权限才能运行的文件如(.exe 和.dll 文件等) 的虚目录允许“读”和“执行”权限。其它情况都设置为“读”和“脚本”权限。
(3)脚本映射 IIS 使用名为 ISAPIExtension(IIS 应用程序编程接口) 程序追加各种各样的功能。如果向 IIS 请求预留有关联扩展口的文件, ISAPIExtension 就会被调出。这种关联就是“脚本映射”。因 ISAPIExtension 而引起的安全漏洞很多。曾经一度泛滥危害尤烈的“红色代码”及“红色代码 II”蠕虫利用的就是 ISAPIExtension 中的“idq.dll”。通过删除脚本映射, 就可以消除 ISAPIExtension 的影响。不过, ISAPIExtension 的功能也就无法使用了。 如果不需要, 建议删除以下映射: Index Server Web Interface(.idq) Server Side Includes(.shtm l,.shtm,.stm)Internet Data Connector(.idc)Internet Printing(.printer)
HTR Scripting (.htr) 如果使用 asp 的话, 一定要保留 ActiveServer Pages (.asp)这映射, 否则 ASP 程序无法正常运行。
(4)Global.asa 文件的安全 我们知道, 运行 ASP 程序的 Windows 服务器, 在 ASP 程序根目录下一般存在一个叫 globa l.asa 的文件, ASP 程序的各种初始化配置和数据库密码等关键信息一般都放在这个文件里面。一般来说, ASP 程序员的数据库密码不是放在 global.asa 中就是在每个 ASP 文件中。这种密码以明文的方式储存在文件中的做法, 是 IIS server 最大的安全隐患之一。为了充分保护 ASP 应用程序, 一定要在应用程序的 Global.asa 文件上为适当的用户或用户组设置 NTFS 文件权限。
(5)安装最新的补丁。
(6)关闭不使用的服务和协议。
(7)不要把密码、物理路径直接写在程序中。把密码和用户名保存在虚拟目录中的数据库中。
(8)应该有一个网站操作日志, 将尽可能多的详细信息包括用户的浏览器、用户停留的时间、用户 IP、普通管理员操作情况等)记录在网站操作日志中, 其中, 记录 IP 是很重要的。如果用户使用了代理, 则只能记录代理的 IP。可用下面的语句了解客户端和服务端的信息:
<%for each name in request.Servervariables
response.write name
request.servervariables(name)
next%>
(9)安装防火墙。
(10)采用数据加密技术 数据加密技术主要分为数据传输、数据存储、数据完整性的鉴别以及密钥管理技术 4 种。
2 ASP 安全漏洞及解决方法
2.1 ASP 源代码泄漏
在使用 Win95+pws 或 IIS3.0 的网站中, 如果输入一些特殊符号包括小数点: %81, ::¥DATA, %2e, %2e%41sp, %2e%asp, 将可以在客户端看到 ASP 源程序。如: http:// someurl/somepage.asp::¥DATA, 解决方法是安装 IIS4.0, IIS5.0 或 PWS4.0。
2.2 脚本安全隐患
一般而言, 脚本文件都要结合数据库来使用, 如 ACCESS、MSSQL、等。脚本攻击就是针对访问数据库的脚本对一些变量过滤不严的问题而达到得到用户密码等敏感信息、修改数据库等目的。
(1) 如果网站留言簿的 ASP 程序没有屏蔽 HTML 语句, 输入HTML 语句, 比如: <a href = " url" onmouseover = ' while (1) {alert ( "Hi! " ) ;}' >你好< / a > 只要查看该留言的用户鼠标滑过“你好”, 就会弹出无数的“Hi!”窗口直至浏览器因死循环而死掉。可以编写一段程序对输入数据进行检查, 屏蔽掉 HTML 和 JavaScript 语句。
(2) 对于每个试图访问被限制的 ASP 内容的用户必须经过身份验证, 这是一个容易被忽视的安全问题。在需要验证的 ASP 页面开头处进行判断, 跟踪上一个页面的文件名, 只有从上一页面转进来的会话才能读取这个页面。
2.3 FileSystemObject 对象的危险性
FSO 提供了非常便利的文本文件和文件目录的访问, 但是同时也对 IIS Web 服务器数据安全造成了一定的威胁。如果没有用到, 建议在服务器上禁用该组件。禁用方法有两种。
(1) 把该组件从系统中注销掉方法是: RegSrv32/u C:\WINNT\SYSTEM 32\scrrun.dll 注销以后, 任何人都不能在该服务器上使用该组件。
(2)修改 Progid 的值
在 ASP 里调用组件的方式通常是 Set 对象名= Server.CreateObject ("Progid" ), 这时候我们就可以通过修改注册表中的Progid 值达到禁用该组件的目的。在开始- 运行中敲入 regedit, 然后找到 HKEY- CLASS- ROOT\Scripting.FileSystemObject, 这时候我们就可以更改该 Progid 的值了, 如改成 Scripting.FileSystemObject2。这样在 ASP 页里就这样调用了:
<%@Language= Vbscript%>
< %Se t Fs = Server CreateObject ("Scripting.FileSy stemObject2" ) % >
这样修改以后, 系统管理员可以根据修改后的 ProgID 值来调用该组件, 而其他人由于不知道修改后的 ProdID 值, 所以就无法使用该组件了。
2.4 数据库可能被解密
由于 Access 数据库的加密机制比较简单, 即使设置了密码,解密也很容易。该数据库系统通过将用户输入的密码与某一固定密解 ( 例如: Access97 为 86 FB EC 37 5D 44 9C FA C65E 28 E613) 进行“异或”来形成一个加密串, 并将其存储在 3.mdb 文件从地址“&H42”开始的区域内。我们可以轻松地编制解密程序, 一个几十行的小程序就可以轻松地获得任何 Access 数据库的密码。因此, 只要数据库被下载, 其信息就没有任何安全性要言了。
防止数据库被下载, 由于 Access 数据库加密机制过于简单,有效地防止数据库被下载, 就成了提高 ASP+Access 解决方案安全性的重中之重。以下两种方法简单、有效。
(1)非常规命名法。为 Access 数据库文件起一个复杂的非常规名字, 并把它放在几个目录下。例如, 对于数据库, 我们不把它命名为“data.mdb”而是起个非常规的名字, 例如: xkjop3f.mdb, 再把它放在如./akkt/ kj61/ acd/av5 的几层目标下, 这样黑客想通过猜的方式得到 Access 数据库文件名就很难了。
(2) 使用 ODBC 数据源。在 ASP 程度设计中, 应尽量使用ODBC 数据源, 不要把数据库名写在程序中, 否则, 数据库名将随ASP 源代码的失密而一同失密, 例如:
BPath = Server. MapPath “./ akkt/ kj61/ acd/av5/ xkjop3f.mdb”)
Conn.open“driver = {Microsoft Access Driver( 3.mdb) };dbq = ”&DBPath
可见, 即使数据库名字起得再怪异, 隐藏的目录再深, ASP 源代码失密后, 也很容易被下载下来。如果使用 ODBC 数据源, 就不会存在这样的问题了: conn.open“ODBC- DSN 名”。
2.5 基于 SQL 语句的客户资格认证漏洞
许多网站通过客户资格认证系统, 达到加密内部网页的目的。然而,“a ' or' 1' =1”成为攻破该类认证系统的万能密码。类似的密码还可以有无数个。原因出在 ASP 程序的漏洞上。因为资格认证网页通常采用以用户输入的密码为条件, 判断注册用户数据库是否有该用户记录, 如果有, 则说明该用户为合法用户, 允许通过。反之, 继续要求输入正确的用户名和密码。假设 pwddb 是数据表名, id 和 pwd 是用户名和密码字段。则按条件查找记录的Sql 语句为: sql="select * from pwddb where id=' "&id&" ' andpwd=' "&pwd &' "此时, 用户只要根据 sql 构造一个特殊的用户名和密码, 如: abc' or ' 1' =' 1 。就可以成功登录。将程序和用户数据合起来将变成: sql="select * from pwddb where id = "&a'or ' 1' =1&"andpwd="&pwd&"由于有 or 运算符和“1=1”恒成立条件, 数据库的所有记录都满足此条件, 因而执行了此 SQL 语句后, 将会得出用户数据库有记录的错误结果。解决方法是对输入的内容验证是否含有空格和“' ”。如果有, 就判断为非法, 继续要求输入密码。
3 结束语
ASP是网站开发应用的一种快速工具, 但是我们不能忽视了ASP 的安全问题。本文仅列举了一些比较典型的安全问题, 要想做到网站的真正安全, 还需要我们不断的努力和实践。
参考文献:
[1]张文增,孙振国,陈强,等.基于 ASP 和 Web 数据库技术的服务器应用程序开发方案[J].计算机工程,2001,27(5):78- 80.
[2]潘示诒,袁新宇.用 IIS 和 ASP 技术构造 Web 站点的安全措施[J].武汉科技大学学报,2000,23(3):304- 305.
[3]阳威特.Web 应用程序的安全维护[J].微型机与应用,2000(6). 本站搜索: ASP IIS 网络安全 [在Google上搜索相关文章] [在百度上搜索相关文章]
【郑重声明】 本站所有文章除注有来源网址外均为互联网首发,按照 创造共用方式授权,允许相关网站转载,但必须标明作者名称并在明显位置作好原文网址链接(复制以上链接),且不能运用于任何商业目的。 —— 建筑知识引擎小组
|