首页 百科知识 系统代码的安全防范

系统代码的安全防范

时间:2022-05-31 百科知识 版权反馈
【摘要】:任务3 系统代码的安全防范任务综述通过此任务的学习,学生可以对应用系统代码资源的访问权限与代码本身的安全做好安全防范设置。任务实施用户应高度重视正确配置安全设置的必要性。这种密码以明文方式储存在文件中的做法,被认为是IIS server最大的安全隐患之一。系统管理员必须相信,这些漏洞可以绕过IIS的安全访问机制,如果不将这些已知漏洞补上,整个数据库就没有安全性可言。

任务3 系统代码的安全防范

任务综述

通过此任务的学习,学生可以对应用系统代码资源的访问权限与代码本身的安全做好安全防范设置。

任务分析

Web 服务器提供各种方法保护 ASP 应用程序免受未授权的访问和篡改。包括:Web服务器权限、NTFS 权限、维护 Global.asa 的安全、脚本映射文件、Cookie 安全性、保护元数据库、维护包含文件的安全、客户资格认证、用于处理资格证明的 ASP 脚本、创建事务性脚本十种方法。

任务实施

用户应高度重视正确配置安全设置的必要性。如若不正确地配置安全设置,不但会使ASP应用程序遭受不必要的篡改,还会妨碍正当用户访问.asp文件。Web服务器提供以下十种方法保护ASP应用程序免受未授权的访问和篡改。

一、Web服务器权限

用户可通过配置自己的 Web 服务器的权限限制所有用户查看、运行和操作自己的ASP 页的方式。不同于 NTFS 权限提供的控制特定用户对应用程序文件和目录的访问方式,Web 服务器权限应用于所有用户且不区分用户账号的类型。用户如欲运行ASP 应用程序,在设置Web服务器权限时须遵循下列原则:

(1) 对包含.asp文件的虚拟目录允许“读”或“脚本”权限;

(2) 对.asp文件和其他包含脚本的文件(如.htm 文件等)所在的虚拟目录允许“读”和“脚本”权限;

(3) 对包含.asp文件和其他需要“执行”权限才能运行的文件(如.exe 和.dll文件等)的虚拟目录允许“读”和“执行”权限。

二、NTFS权限

用户可以通过为单独的文件和目录应用 NTFS 访问权限保护 ASP 应用程序文件。NTFS 权限是Web服务器安全性的基础,它定义了一个或一组用户访问文件和目录的不同级别。当拥有 Windows 有效账号的用户试图访问一个有权限限制的文件时,计算机将检查文件的访问控制表(ACL),该表定义了不同用户和用户组所被赋予的权限。如果用户的账号具有打开文件的权限,计算机则允许该用户访问文件。例如,Web服务器上的Web应用程序的所有者需要有“更改”权限查看、更改和删除应用程序的.asp文件。但访问该应用程序的公共用户应仅被授予“只读”权限,以便将其限制为只能查看而不能更改应用程序的Web页。

三、维护Global.asa的安全

运行ASP程序的Windows Server在ASP程序根目录下存在一个叫global.asa的文件,ASP程序的各种初始化配置和数据库密码等关键信息都放在这个文件里,ASP程序员的数据库密码如不放在global.asa中就是在每个ASP文件中。这种密码以明文方式储存在文件中的做法,被认为是IIS server最大的安全隐患之一。输入:http://www.xxx.com/global.asa,结果会出现:HTTP/1.1不允许请求GLOBAL.ASA。

虽然如此,由于该文件是文本文件,而已知道利用Windows的错误配置和ASP bug等方法查看Web目录下的文本文件的方法有很多种。系统管理员必须相信,这些漏洞可以绕过IIS的安全访问机制,如果不将这些已知漏洞补上,整个数据库就没有安全性可言。ASP的使用虽然很方便,但不安全的特性是ASP这种解释性程序的先天缺陷,故在实际解决方案中最好用复杂的算法对数据库账号和密码加密。

为充分保护 ASP 应用程序,须在应用程序的Global.asa文件上为适当的用户或用户组设置 NTFS 文件权限。如Global.asa包含向浏览器返回信息的命令而没有保护Global.asa 文件,则信息将被返回给浏览器,即便应用程序的其他文件被保护。

注意:一定要对应用程序的文件应用统一的NTFS权限。如果不小心过度限制了一个应用程序需要包含的文件的 NTFS 权限,则用户可能无法查看或运行该应用程序。为防止此类问题的出现,在为应用程序分配 NTFS权限之前应先仔细计划。

四、脚本映射文件

应用程序的脚本映射保证了Web 服务器不会意外下载.asp文件的源代码。例如,即使为包含了某个.asp文件的目录设置了“读”权限,只要该.asp文件隶属于某个脚本映射应用程序,则Web服务器就不会将该文件的源代码返回给用户。

五、Cookie安全性

ASP 使用SessionID Cookie跟踪应用程序访问或会话期间特定的Web浏览器的信息。这就是说,带有相应的Cookie的HTTP请求被认为是来自同一Web浏览器。Web 服务器可使用 SessionID Cookie 配置带有用户特定会话信息的 ASP 应用程序。如果应用程序是一个允许用户选择和购买CD唱盘的联机音乐商店,就可用 SessionID 跟踪用户漫游整个应用程序时的选择。

为防止计算机黑客猜中SessionID Cookie并获取对合法用户的会话变量的访问,Web服务器为每个SessionID指派一个随机生成号码。每当用户的 Web 浏览器返回一个SessionID Cookie 时,服务器取出 SessionID 和被赋予的数字,接着检查是否与存储在服务器上的生成号码一致。若两个号码一致,将允许用户访问会话变量。这一技术的有效性在于被赋予的数字的长度(64位),此长度使计算机黑客猜中 SessionID 从而窃取用户的活动会话的可能性几乎为0。

截获了用户 sessionID Cookie 的计算机黑客能使用此Cookie假冒该用户。如 ASP应用程序包含信用卡或银行账户号码等私人信息,拥有窃取的Cookie的计算机黑客就可以在应用程序中开始一个活动会话并获取这些信息。用户可通过对自己的 Web 服务器和用户的浏览器间的通信链路加密防止SessionID Cookie被截获。

六、保护元数据库

访问元数据库的 ASP 脚本需要 Web 服务器所运行的计算机的管理员权限。在从远程计算机上运行这些脚本时,必须通过身份验证的连接,如使用 Windows请求/响应验证方式进行连接。故应为管理级.asp文件创建一个服务器或目录并将其目录安全验证方式设置为 Windows 请求/响应式身份验证。

七、维护包含文件的安全

如从位于没有保护的虚拟根目录中的.asp文件中包含了位于启用了SSL(Secure Sockets Layer)的目录中的文件,则SSL将不被应用于被包含文件。因此,为保证应用SSL,应确保包含及被包含的文件都位于启用了SSL的目录中。

八、客户资格认证

控制ASP 应用程序访问一种十分安全的方法是要求用户使用客户资格登录。客户资格是包含用户身份信息的数字身份证,其作用与传统的诸如护照或驾驶执照等身份证明相同。用户通常从委托的第三方组织获得客户资格,第三方组织在发放资格证之前确认用户的身份信息。(通常,这类组织要求姓名、地址、电话号码及所在组织名称,此类信息的详细程度随给予的身份等级而异)

每当用户试图登录到需要资格验证的应用程序时,用户的Web浏览器会自动向服务器发送用户资格。如Web服务器的SSL资格映射特性配置正确,则服务器即可在许可用户对ASP应用程序访问之前对其身份进行确认。

九、用于处理资格证明的ASP脚本

作为ASP应用程序开发人员,可以编写脚本检查资格是否存在并读取资格字段。例如,从资格证明中访问用户名字段和公司名字段。Active Server Pages 在 Request 对象的 Client Certificate 集合中保存资格信息。

必须将Web服务器配置为接收客户资格,然后才能通过ASP处理客户资格,否则,Client Certificate集合将为空;也可通过编写程序完成对客户的资格验证。下面是authenticate. asp页面,在这里,将用户的信息收集起来,连同最初的URL一起传到一个识别用户身份的页面中。可用一个数据库来存放用户的信息,包括用户名和口令。

authenticate. asp:

<%

Dim URL

URL = Request.Query String

' 获得URL

%>

<HTML>

<BODY>

<FORM METHOD=POST ACTION="validate. asp">

<INPUT TYPE=Hidden Name="URL" Value="<%=URL%>">

' 将URL保存到一个隐藏变量中

用户名:

<INPUT TYPE=TEXT Name ="txtName">

口令:

<INPUT TYPE=PASSWORD Name ="txtPassword">

<INPUT TYPE=SUBMIT>

</FORM>

</BODY>

</HTML>

再用validate. asp文件获取传递给它的信息,从数据库中读取用户名和口令,以判断是否给用户授权。

validate. asp:

<%

Dim str User Name,str Password

str User Name = Request.form9("txt Name")

str Password = Request.form("txt Password")

' 从表单中读取用户名和口令

' 建立数据库连接...

Dim str SQL

str SQL = "SELECT * FROM Valid Users WHERE User Name = " &

str User Name & " AND Password = " & str Password

' 进行SQL查询

Dim rs

Set rs = Conn.Execute(strSQL)

If not rs.EOF Then

' 如果recordset不为空,则用户名有效

Session("bolAuthenticated")= True

' 将bolAuthenticated 设为True

Response.Redirect Request.form("URL")

' 将用户传递到来过的URL

Else

Response.Redirect "notvalidated.asp

' 否则用户无权访问,将用户传递到一个错误提示页面

End If

%>

ValidUsers表的结构如表4.1所示:

表4.1 表结构

img64

十、创建事务性脚本

商业应用程序常需具有在事务内部运行脚本和组件的能力。事务是一种服务器操作,即使该操作包括很多步骤(例如,订货、查看存货、付账等),也只能整体返回操作是成功还是失败。用户可以创建在事务内部运行的 ASP 脚本,如脚本的任何一部分失败,整个事务都将终止。

ASP事务处理以MTS(Microsoft Transaction Server)为基础。MTS是一个事务处理系统,用于开发、配置和管理高性能的、可分级的、有鲁棒性的企业 Internet 和 Intranet服务器应用程序。Transaction Server 为开发分布式的、基于组件的应用程序提供了一个应用程序设计模型。它也为配置和管理这些应用程序提供了一个运行环境。

创建事务性脚本的功能内置在 Internet Information Server 和 Personal Web Server中。如安装了MTS,就可将组件打包,以使组件在事务内部运行。

(1) 关于事务。事务是整体成功或失败的操作。事务处理用于对数据库进行可靠的更新。在对数据库进行许多相关更改或同时更新多个数据库时,要保证所有更改都被正确执行。如果这些更改中的任何一个失败,都需要恢复数据库表的原始状态。

使用 MTS,只需简单地将脚本和组件声明为“需要事务”并让 MTS 处理事务的一致性。事务处理只适用于数据库访问;MTS 不能对文件系统或其他的非事务性资源的更改进行恢复操作。应用程序所访问的数据库必须为 MTS 所支持。目前,MTS 支持 SQL Server 及任何支持 XA 协议(由 X/Open 协会制定)的服务器。MTS 将继续拓展对其他数据库的支持。

事务不能跨越多个 ASP 页。如果一个事务需要来自多个组件的对象,则须将使用这些对象的操作组合在一个 ASP 页中。例如,假定有一个组件用于更新工资单数据库,还有一个组件用于更新人力资源数据库中的员工记录。为了记录一个员工的新的工资信息,需要编写这样一个脚本,该脚本在一个事务环境中调用两个组件,一个用于更新工资单数据库,另一个用于更新人力资源数据库中的员工等级。

(2) 声明事务性脚本。在将一个页声明为事务性时,此页中的任何脚本命令和对象都运行在同一个事务环境中。Transaction Server 处理生成事务的细节并决定事务成功(提交)或失败(终止)。要将某个页声明为事务性,可在页首添加 @TRANSACTION 指令:

<%@ TRANSACTION = value %>

value 参数的取值和含义如表4.2所示。

表4.2 value参数

@TRANSACTION 指令必须在一页中的第一行,否则将产生错误。必须将该指令添加到需要在事务下运行的每一页中。当脚本处理结束时,当前事务即告结束。

大多数应用程序只有一些特定的操作需要事务环境。例如,一个航空公司的站点可能只需事务性脚本处理购票和安排座位,而其他所有脚本则无需事务环境即可安全运行。因为事务只需用于需要事务处理的页即可,不要将应用程序的 Global.asa 文件声明为事务性。

如果事务被终止,Transaction Server 将恢复对支持事务的资源的任何更改。目前,仅数据库服务器完全支持事务,因为数据库中的数据对于企业应用是最为关键的。Transaction Server 不对硬盘上的文件、会话和应用程序的变量、集合等的改变进行恢复。然而可以通过编写事务事件来编写恢复变量和集合的脚本。在某些时候,如向文件写数据失败时,脚本也可以显式的提交或终止一个事务。

(3) 提交或终止脚本。因为 Transaction Server 跟踪事务处理,所以它决定事务是完全成功还是失败。脚本可通过调用 Object Context.Set Abort 显式地声明终止一个事务。当一个事务在从一个组件收到错误消息、违反商业规范时(例如,账户余额小于 0)或读写文件等非事务性操作失败时,脚本就需终止该事务。如果页在事务完成之前超时,也须终止事务。

(4) 编写事务事件。脚本本身不能决定事务是成功还是失败。但可编写提交或终止事务时被调用的事件。假设有一个通过自制组件(My Example.Bank Component)的方法(Deposit)确认银行账户的脚本,且需针对事务的不同状态将不同的页返回给用户,那么就可以使用 On Transaction Commit(事务成功)和 On Transaction Abort(事务失败)事件编写对用户的不同响应。

<%@ TRANSACTION = Required

Response.Buffer = True

%>

<HTML>

<BODY>

<H1>Welcome to the online banking service</H1>

<%

Set BankAction = Server.CreateObject("MyExample.BankComponent")BankAction.Deposit(Request("AcctNum"))

%>

<P>谢谢!的事务已开始执行。</P>

</BODY>

</HTML>

<%

' 如果事务成功显示该页:

Sub OnTransactionCommit()

Response.Write "<HTML>"

Response.Write "<BODY>"

Response.Write "Thank you. Your account has been credited."

Response.Write "</BODY>"

Response.Write "</HTML>"

Response.Flush()

end sub

%>

<%

'如果事务失败显示该页:

Sub OnTransactionAbort()

Response.Clear()

Response.Write "<HTML>"

Response.Write "<BODY>"

Response.Write "We are unable to complete your transaction."

Response.Write "</BODY>"

Response.Write "</HTML>"

Response.Flush()

End sub

%>

(5) 在MTS资源管理器中登记一个组件。为参与一个事务,组件必须在 MTS 包中登记,且须被配置为需要事务。如果脚本是通过调用两个组件来处理订单的,一个更新库存数据库,另一个更新付款数据库。则该两个组件就要在同一个事务环境中运行。Transaction Server 保证如果任意一个组件失败,那么将不会有数据库被更新。

注册和配置事务性组件可使用 MTS 资源管理器。必须将事务的属性设置为需要事务或需要新事务。事务组件必须在 MTS 包中注册。不要将组件放在 IIS 内部进程包中,而应创建自己的包。通常应将所有组件放在一个组件库中。组件库的组件可被多个 ASP应用程序使用并以 ASP 应用程序进程运行。使用 MTS 资源管理器可创建新的包并将包的 Activation 属性设置为 Library。也可在 Server 包中注册事务性组件。Server 包通常以服务器上的一个独立的进程运行。如果希望使用基于职能组的安全性检查或希望组件可被远程计算机上的应用程序访问,可对事务性组件使用 Server 包。要使用 MTS资源管理器,必须安装MTS。

(6) 对象作用域。一般不要将从MTS组件中创建的对象存储在 ASP Application 或Session 对象中。MTS对象在事务完成后消失。因为 Session 对象和 Application 对象是为在不同 ASP 页之间使用的对象实例设计的,所以不要用它们保存在事务结束时即被释放的对象。

任何事务性 ASP 页所使用的 MTS 对象都被认为是事务的一部分。事务完成后,在页中使用的 MTS 对象将消失,其中包括存储在 Session 或 Application 对象中的对象。此后,从另一个事务性页中调用会话作用域或应用程序作用域对象的尝试都将失败。

(7) 事务排。从一个远程服务器对数据库的更新可能因为网络延迟或故障而导致事务延迟或终止。因为事务的所有部分都必须提交,所以应用程序将可能挂起,等待远程服务器的提交或终止消息,也可因无法发送数据库更新而导致事务被放弃。

对于必须同时完成的更新,正确做法是在事务的所有参与者都能提交之前终止事务或推迟完成事务。例如,航空公司的订票程序应该同时完成对客户的银行账号计入借方和对航空公司的银行账户计入贷方。如一个更新属于事务整体的一部分,但可能晚于其他更新,可能不希望让客户等待整个更新过程的完成。例如,机票预订事务可能也要向食品供应商发送食品订单或更新客户的旅程津贴。这些操作虽然也必须完成,但可以晚一些。

Microsoft Message Queue Server 能够将一个或一组更新捆绑到一个事务性消息中送给远程服务器。Message Queue Server 保证更新将被发送给远程服务器,即使目前网络不可用。应用程序将收到一个提交消息,从而可以继续处理事务。

知识拓展

一、NTFS权限

NTFS 权限是 Web 服务器安全性的基础,它定义了一个或一组用户访问文件和目录的不同级别。当拥有Windows有效账号的用户试图访问一个有权限限制的文件时,计算机将检查文件的访问控制表(ACL)。该表定义了不同用户和用户组所被赋予的权限。

二、global.asa的文件

ASP程序的各种初始化配置和数据库密码等关键信息一般都放在这个文件里面,一般来说,ASP程序员的数据库密码不是放在global.asa中就是在每个ASP文件中。

三、SessionID Cookie

ASP使用SessionID Cookie跟踪应用程序访问或会话期间特定的Web浏览器的信息,即带有相应的Cookie的HTTP请求被认为是来自同一Web浏览器。Web服务器可以使用SessionID Cookies配置带有用户特定会话信息的ASP应用程序。

四、客户资格

控制ASP 应用程序访问的一种十分安全的方法是要求用户使用客户资格登录。客户资格是包含用户身份信息的数字身份证,其作用与传统的诸如护照或驾驶执照等身份证明相同。用户通常从委托的第三方组织获得客户资格,第三方组织在发放资格证之前确认用户的身份信息。

五、事务处理

ASP事务处理以MTS为基础。MTS是一个事务处理系统,用于开发、配置和管理高性能的、可分级的、有鲁棒性的企业Internet 和 Intranet 服务器应用程序。

任务总结

一个安全的网站必须具备以上设置才有可能抵御各种网站入侵和攻击。学习了本任务后,学生应能掌握网站设置技能,以抵御各种网站入侵和攻击。

任务评价

一、评价方法

本任务采用学生自我评价、小组评价和教师评价的方法,对学习目标进行检验。学生本人首先对自己的调研情况进行自查,找出成绩分析不足;小组根据每位同学所做的工作和对调查报告结论的贡献给出综合评价;最后教师针对每个小组的调研报告结合每一位同学给出评价结论,指出改进和努力的方向。

二、评价指标

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈