你目前正处于脱机状态,正在等待 Internet 重新连接

如何审阅 Visual InterDev 生成 CSSI 漏洞的代码

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 253120
本文已归档。它按“原样”提供,并且不再更新。
概要
下面的文章讨论了如何识别和正确的 Visual InterDev 应用程序容易受到 CSSI (跨站点脚本安全问题)。 仅输入这是不能正确验证或格式使您的应用程序容易受到攻击。

本文重点介绍 Visual InterDev 设计时控件 (DTC) 和脚本库。 有关 ASP 代码有关的一般原则,请参阅以下知识库文章:
253119如何查看 ASP 代码 CSSI 的漏洞
更多信息
Visual InterDev dtc 向开发人员独特的挑战因为自动生成的代码中的一部分。 开发人员可能不熟悉的脚本对象生成的特定实现和它们或如何最好地解决它们的任何漏洞。 本文介绍了各种 dtc 的所有已知的问题,它还介绍了解决这些漏洞的可能的选项。

该问题有两个特定的类别:
  1. dtc 编写脚本以显示从一个数据库和数据库的数据,包含用户输入的。
  2. 若要显示脚本的 dtc 或从客户端提交的使用数据。
在这两种情况下正确验证和 $ 编码的输出值防止基于 DTC 的网页使用在 CSSI 攻击。

当使用检索信息的 DTC 的任何方法 (如.getCaption、.getText、.value) 作为该 DTC,从值已设置使用用户提供信息时得到的字符串不是 HTMLEncoded。 此外,可以绑定到数据库字段某些 dtc 将显示原始信息从数据库,而无需编码。 按如下方式应当 HTMLEncode 这些值显示到浏览器时。 例如:
Response.Write Server.HTMLEncode(Textbox1.value)				
如果数据是可作为一个 URL 的一部分,您应改用 URLEncode。 例如:
Response.Write "<A HREF=http://webserver/webapplication/page.asp?data=" & Server.URLEncode(Textbox1.value) & ">Click here!</A>"				
由于有多种方法对 entrusted 脚本代码字符进行编码,您应显式设置字符集的页在浏览器呈现。 可以通过插入两个文档的 <head>标记之间的客户端 <meta>标记来执行此操作。 例如:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset= ISO-LATIN-1">				
为此,也可以从 ASP 使用 Response.Charset 属性:

<% Response.Charset= "ISO-LATIN-1" %>				


下面是一些常见示例:

显示示例代码
按钮 DTC 的值
Response.Write Button1.Value()
CheckBox DTC 的标题
Response.Write CheckBox1.getCaption()
标签 DTC 的标题
Response.Write Label1.getCaption()
列表框 DTC 的文本
Response.Write Listbox1.getText()
一个选项组 DTC 的值
Response.Write OptionGroup1.getValue()
文本框 DTC 的值
Response.Write Textbox1.Value()


以下是有关这些示例可能的解决方案:

显示示例代码
按钮 DTC 的值
Response.Write Server.HTMLEncode(Button1.Value())
CheckBox DTC 的标题
Response.Write Server.HTMLEncode(CheckBox1.getCaption())
标签 DTC 的标题
Response.Write Server.HTMLEncode(Label1.getCaption())
列表框 DTC 的文本
Response.Write Server.HTMLEncode(Listbox1.getText())
一个选项组 DTC 的值
Response.Write Server.HTMLEncode(OptionGroup1.getValue())
文本框 DTC 的值
Response.Write Server.HTMLEncode(Textbox1.Value())


网格 DTC 会从数据库中检索到不 HTMLEncode 值。 如果您的数据库所需用户输入 (例如对于留言簿),您应 HTMLEncode 您的输出。 这可通过单击在 网格 属性对话框中的 数据 选项卡并键入:
=Server.HTMLEncode([fieldname])				
fieldname 其中是为该列显示每个字段的名称。 大多数 dtc 自动 HTMLEncode 数据从数据库中检索到显示时,有些不这样做。 使这些控件应使用的其他代码,以确保输出到客户端是否正常 HTMLEncoded。

注:dtc 通常会自动实现过程向服务器的往返行程中维护其状态所需的逻辑。在文本框 DTC 的情况下例如对于该信息时圆形正常启动与的服务器 Textbox.asp 脚本库页 HTMLEncodes 文本的内容框维护控件状态的过程。
参考
有关详细的信息,请参阅以下公告从该计算机紧急响应小组 (CERT) 卡耐基-梅隆大学: 请参见下面的知识库文章,有关详细信息:
252985如何防止跨站点脚本安全问题的 Web 应用程序
253119如何查看 ASP 代码 CSSI 漏洞
253121如何审阅 MTS/ASP 代码 CSSI 漏洞
253117防止 Internet Explorer 和 Outlook Express 跨站点脚本安全问题
kbCSSI

警告:本文已自动翻译

属性

文章 ID:253120 - 上次审阅时间:10/20/2013 17:10:02 - 修订版本: 1.4

Microsoft Visual InterDev 6.0 标准版

  • kbnosurvey kbarchive kbmt kbcssi kbctrl kbhowto kbsecurity kbsecvulnerability KB253120 KbMtzh
反馈