如何检查针对 CSSI 漏洞的 MTS/ASP 代码

文章翻译 文章翻译
文章编号: 253121 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
展开全部 | 关闭全部

概要

本文描述如何识别和纠正 Microsoft 事务服务器/活动服务器页面 (ASP) 应用程序容易受到跨站点脚本安全问题 (CSSI)。 不能正确验证或格式设置的唯一输入使应用程序容易受到攻击。

更多信息

因此地解决它最适合问题从演示文稿层中的应用程序处理数据验证和格式,该方式中确定 CSSI 问题。

这一层通常包含 ASP 页,有时它可能要显示的 ASP 页的 HTML 呈现中包括帮助某些组件。

在后一种情况下值得注意尽管应用程序应执行相同的操作来保护其自身从 CSSI 作为仅 ASP 应用程序的物理实现将导致验证/格式代码在运行 ASP 页中的某些以及一些在组件中。有关 CSSI 和 ASP 的详细信息,请参阅下列 Microsoft 知识库文章:
253119如何查看 ASP 代码 CSSI 漏洞
以下步骤将帮助您识别和纠正 ASP 应用程序易受 CSSI:
  1. 查看为 ASP 或组件生成要显示的 HTML 代码。有两种典型的方案:
    • 该组件生成并返回 ASP 将直接写入响应为 HTML 字符串。
    • 该组件调用 Response.Write 在内部将直接写入页。通常将响应的对象引用从该 ObjectContext 获得通过调用 GetObjectContext.Item("Response")。
  2. 确定是否将 HTML 输出包括应用程序数据。 此数据可以来自等数据库、 文件、 cookie,这样的来源的各种其他的对象变量等等。
  3. 确定适当的解决方案。ASP 或组件遇到找到代码生成 HTML 使用的某些输入,您必须为特定应用程序确定适当的解决方案。解决方案包括 (但不限于) 验证/筛选的数据无效或并对其进行编码。

用于设置格式的准则

下列准则可帮助您识别处理格式正确的位置。

当信息写入页中,该特定应用程序的数据必须 HTMLEncoded。它不重要 HTMLEncode 标记旨在得到 HTML 页中。因此,如果您的组件功能返回 HTML,该 HTMLEncode,必须完成其中。

要从组件 HTMLEncode 字符串,您将需要对 ASP 的服务器对象的引用。您可以从 MTS ObjectContext.Items 集合中获取此引用:
sGoodHTML = GetObjectContext.Item("Server").HTMLEncode(sRawData) 
				
示例: 此代码将值从记录集中执行生成表中的行。此代码不会不编码输出:
Do While Not oRecordset.EOF
     sHTML = sHTML & "<TR>" 
     sHTML = sHTML & "<TD>" & oRecordset("FirstName") & "</TD>"
     sHTML = sHTML & "<TD>" & oRecordset("Address") & "</TD>"
     sHTML = sHTML & "</TR>" 
Loop
				
在解决此代码时请注意值本身是 HTMLEncoded,而不是整个 HTML 字符串:
Dim oServer As ASPTypeLibrary.Server

Set oServer = GetObjectContext.Item("Server")

Do While Not oRecordset.EOF
     sHTML = sHTML & "<TR>" 
     sHTML = sHTML & "<TD>" & oServer.HTMLEncode( oRecordset("FirstName")) & "</TD>"
     sHTML = sHTML & "<TD>" & oServer.HTMLEncode( oRecordset("Address")) & "</TD>"
     sHTML = sHTML & "</TR>" 
Loop

Set oServer = Nothing
				
注意使用的中间 oServer 对象引用。这是包含利用早期绑定的并避免每次解析 ObjectContext.Item 查阅。若要声明一个对象作为 ASPTypeLibrary.Server,则必须包含对"microsoft 活动服务器页面对象库"的引用。

请考虑以下准则:
  • 业务组件不应调用 HTMLEncode (除非它们还会呈现 HTML)。这是一项任务的表示层。
  • 通常,使用 HTMLEncode 或任意位置的任何 ASP 对象的组件应物理上运行在同一台计算机作为 Internet 信息服务器 (IIS) 上。
  • 解决方案包括 (但不限于) 验证输入的参数和格式输入参数。

参考

有关详细的信息,请参阅以下公告从该计算机紧急响应小组 (CERT) 卡耐基-梅隆大学:
http://www.cert.org/advisories/CA-2000-02.html
有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
252985如何防止跨站点脚本安全问题的 Web 应用程序
253120如何查看 Visual InterDev 生成 CSSI 漏洞的代码
253117如何防止 Internet Explorer 和 Outlook Express CSSI 漏洞

属性

文章编号: 253121 - 最后修改: 2013年10月20日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft Transaction Services 2.0
关键字:?
kbnosurvey kbarchive kbmt kbcssi kbhowto KB253121 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 253121
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com