在安装累积安全更新 974455 后,会在 Internet Explorer 中收到 VBScript“类型不匹配”脚本错误消息

文章翻译 文章翻译
文章编号: 976949 - 查看本文应用于的产品
展开全部 | 关闭全部

简介

为解决发现的安全漏洞,Internet Explorer 累积安全更新 974455(在 MS09-054 中进行了介绍)向各种方法中引入了附加的“类型”安全检查。在某些特定情况下,这些新的类型安全检查可能会导致使用 VBScript 的网页或混合使用 VBScript 和 JavaScript 的网页中出现“类型不匹配”脚本错误。

有关 MS09-054 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
974455 MS09-054:Internet Explorer 累积安全更新

症状

使用 VBScript 作为客户端脚本语言的网页以及使用 showModalDialog() 或 showModelessDialog() 方法的网页可能会遇到“类型不匹配”脚本错误。Microsoft 已经确定在以下三种情况下可能会生成“类型不匹配”脚本错误:
  • showModalDialog()
    第一种情况涉及到在 VBScript 中将 Array() 值作为参数传递到 showModalDialog() 方法。showModalDialog() 方法支持一个必需参数 (sURL) 和两个可选参数(vArguments 和 sFeatures)。vArguments 参数是一个 VARIANT 类型参数,该参数指定在显示文档时要使用的参数。如果开发人员决定将 Array() 直接传递到可选 vArguments 参数,将出现“类型不匹配”脚本错误。

    有关 showModalDialog 方法的更多信息,请访问下面的 Microsoft MSDN 网页:
    http://msdn.microsoft.com/zh-cn/library/ms536759(VS.85).aspx
  • showModelessDialog()
    第二种情况涉及到在 VBScript 中将 Array() 值作为参数传递到 showModelessDialog() 方法。showModelessDialog() 方法支持一个必需参数 (sURL) 和两个可选参数(vArguments 和 sFeatures)。vArguments 参数是一个 VARIANT 类型参数,该参数指定在显示文档时要使用的参数。如果开发人员决定将 Array() 直接传递到可选 vArguments 参数,将出现“类型不匹配”脚本错误。

    有关 showModelessDialog 方法的更多信息,请访问下面的 Microsoft MSDN 网页:
    http://msdn.microsoft.com/en-us/library/ms536761(VS.85).aspx/PathLink>
  • returnValue
    第三种情况涉及“模式对话框”窗口的 returnValue 属性的显式设置。returnValue 属性是没有默认值的读/写属性。根据 MSDN 上的文档,returnValue 属性仅应用于使用 showModalDialog() 方法创建的那些窗口。如果开发人员决定在 VBScript 中将“模式对话框”窗口的 returnValue 属性显式设置为 Array() 值,将出现“类型不匹配”脚本错误。

    有关 return Value 属性的更多信息,请访问下面的 Microsoft MSDN 网页:
    http://msdn.microsoft.com/zh-cn/library/ms534371(VS.85).aspx
目前,Microsoft 尚未在使用 JavaScript 作为唯一客户端脚本语言的网页中发现由累积安全更新 974455 引起的“类型不匹配”脚本错误。似乎仅影响在 VBScript 中使用 showModalDialog() 方法、showModelessDialog() 方法或 returnValue 属性的网页。如果网页混合使用 VBScript 和 JavaScript,则在该网页使用上述 VBScript 中的方法或属性或者该网页使用 VBArray 对象时,才可能受到影响。使用 VBArray 对象并不常见,因此,此知识库文章将不介绍涉及 VBArray 的情况。

原因

为解决在 Internet Explorer 中发现的安全漏洞,已发布 Internet Explorer 累积安全更新 MS09-054。作为此累积安全更新的一部分,Internet Explorer 引入了新的检查,以防止将 VARIANT 类型参数意外地转换为危险的数据类型。附加安全检查将对作为用户控制变量的一部分传递的 VARIANT 类型参数施加一些其他安全限制,以保护用户不受到某些种类的攻击。这些附加检查可能会影响使用 VARIANT 数据类型的合法浏览情形。

解决方案

为解决此问题,请在安装安全更新 974455 后安装更新 976749。 有关此问题的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
976749 有一个 Internet Explorer 更新,可解决在应用安全更新 974455 (MS09-054) 后出现的问题

重要说明:如果尚未安装安全更新 974455,请勿安装更新 976749。如果在没有首先安装安全更新 974455 的情况下安装更新 976749,则 Internet Explorer 可能不会正常运行。如果发生这种情况,请卸载更新 976749,安装安全更新 974455,然后重新安装更新 976749。

替代方法

如果您遇到的症状与此文章中所介绍的相同,那么我们建议您继续应用累积安全更新 974455,并且安装更新 976749。如果客户决定删除累积安全更新,则会导致其系统面临风险。

对于在“症状”部分介绍的第一个和第二个方案,如果不希望安装安全更新 974455,则您可以实施临时解决办法。为解决该问题,请将 Array() 变量显式声明到 VBScript 变量中。可以将数组传递到 showModalDialog() 或 showModelessDialog() 方法,不会生成“类型不匹配”脚本错误。

例如,以下 VBScript 将导致“类型不匹配”脚本错误。
// TYPE MISMATCH
vReturn = window.showModalDialog("http://www.contoso.com", Array(1,2,3,4,5,6,7))
以下 VBScript 会将数组传递到 showModialDialog() 或 showModelessDialog() 方法,而不生成“类型不匹配”脚本错误。
// NO TYPE MISMATCH ERROR
Dim myArray
myArray=Array(1,2,3,4,5,6,7)
vReturn = window.showModalDialog("http://www.contoso.com", myArray)
对于早期提到的第三个方案,如果您不希望安装安全更新 974455,则您可以实施规避措施。若要解决方案中的一维 Array() 值传递到 returnValue 属性的问题,请使用加入与拆分 VBScript 功能。这样便可以将 Array() 值传递到 returnValue 属性。

例如,以下 VBScript 将生成“类型不匹配”脚本错误。

// TYPE MISMATCH
Dim arrayItems
arrayItems(0) = 1
arrayItems(1) = 2
arrayItems(2) = 3
Window.returnvalue = arrayItems
在使用 VBScript 的 Join 和 Split 函数时,可以设置 returnValue 属性,而不会生成“类型不匹配”脚本错误。

// NO TYPE MISMATCH ERROR
Dim arrayItems
arrayItems(0) = 1
arrayItems(1) = 2
arrayItems(2) = 3

Dim arrString = Join(arrayItems, ";")
Window.returnvalue = arrString
Dim strTemp = window.showModalDialog(……)
Dim arrayItems = Split(strTemp, ";")

对于前面讨论的第三种情况(其中将多维 Array() 值或具有对象的 Array() 值传递到 returnValue 属性),如果您不希望安装安全更新 974455,则您可以实施临时解决办法。若要解决本方案中的问题,可以使用 JavaScript 功能设置 returnValue 属性。此 JavaScript 函数可用于 VBScript 子例程和函数。由 JavaScript 函数设置的任何 returnValue 属性值均将可用于 VBScript。

例如,以下 VBScript 将生成“类型不匹配”脚本错误。
// TYPE MISMATCH
<script LANGUAGE=vbscript>
Option Explicit
Sub Window_OnLoad
Dim abc(1,2,3)
Window.ReturnValue = abc
End Sub
</script>
将 JavaScript 函数与现有 VBScript 一起使用时,可以设置 returnValue 属性,而不会生成“类型不匹配”脚本错误。
// NO TYPE MISMATCH ERROR
<script Language=JavaScript>
function setReturnValue(){
var returnValueArray= new Array();
returnValueArray[0] = 1;
returnValueArray[1] = 2;
returnValueArray[2] = 3;
window.returnValue = returnValueArray;
}
</script>

<script LANGUAGE=vbscript??
Option Explicit

Sub Window_OnLoad
setReturnValue()
msgbox window.returnValue
End Sub
</script>

状态

Microsoft 已经确认“适用于”部分中列出的 Microsoft 产品存在此问题。

属性

文章编号: 976949 - 最后修改: 2009年12月3日 - 修订: 3.1
这篇文章中的信息适用于:
  • Windows Internet Explorer 8?当用于
    • Windows Server 2008 Datacenter without Hyper-V
    • Windows Server 2008 Enterprise without Hyper-V
    • Windows Server 2008 for Itanium-Based Systems
    • Windows Server 2008 Standard without Hyper-V
    • Windows Server 2008 Datacenter
    • Windows Server 2008 Enterprise
    • Windows Server 2008 Standard
    • Windows Web Server 2008
    • Windows Server 2008 R2 Datacenter
    • Windows Server 2008 R2 Enterprise
    • Windows Server 2008 R2 Standard
    • Windows Web Server 2008 R2
    • Windows 7 Enterprise
    • Windows 7 Home Basic
    • Windows 7 Home Premium
    • Windows 7 Professional
    • Windows 7 Ultimate
    • Windows Vista Business
    • Windows Vista Enterprise
    • Windows Vista Home Basic
    • Windows Vista Home Premium
    • Windows Vista Ultimate
    • Windows Vista Enterprise 64-bit edition
    • Windows Vista Home Basic 64-bit edition
    • Windows Vista Home Premium 64-bit edition
    • Windows Vista Ultimate 64-bit edition
    • Windows Vista Business 64-bit edition
    • Microsoft Windows XP Professional Edition
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows Server 2003, Datacenter x64 Edition
    • Microsoft Windows Server 2003, Enterprise x64 Edition
    • Microsoft Windows Server 2003, Standard x64 Edition
    • Microsoft Windows Server 2003 Web Edition
    • Microsoft Windows Server 2003 Standard Edition
    • Microsoft Windows Server 2003 Enterprise Edition
    • Microsoft Windows Server 2003 Datacenter Edition
    • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
    • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Windows Internet Explorer 7?当用于
    • Windows Server 2008 Datacenter without Hyper-V
    • Windows Server 2008 Enterprise without Hyper-V
    • Windows Server 2008 for Itanium-Based Systems
    • Windows Server 2008 Standard without Hyper-V
    • Windows Server 2008 Datacenter
    • Windows Server 2008 Enterprise
    • Windows Server 2008 Standard
    • Windows Web Server 2008
    • Windows Server 2008 R2 Datacenter
    • Windows Server 2008 R2 Enterprise
    • Windows Server 2008 R2 Standard
    • Windows Web Server 2008 R2
    • Windows 7 Enterprise
    • Windows 7 Home Basic
    • Windows 7 Home Premium
    • Windows 7 Professional
    • Windows 7 Ultimate
    • Windows Vista Business
    • Windows Vista Enterprise
    • Windows Vista Home Basic
    • Windows Vista Home Premium
    • Windows Vista Ultimate
    • Windows Vista Enterprise 64-bit edition
    • Windows Vista Home Basic 64-bit edition
    • Windows Vista Home Premium 64-bit edition
    • Windows Vista Ultimate 64-bit edition
    • Windows Vista Business 64-bit edition
    • Microsoft Windows XP Professional Edition
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows Server 2003, Datacenter x64 Edition
    • Microsoft Windows Server 2003, Enterprise x64 Edition
    • Microsoft Windows Server 2003, Standard x64 Edition
    • Microsoft Windows Server 2003 Web Edition
    • Microsoft Windows Server 2003 Standard Edition
    • Microsoft Windows Server 2003 Enterprise Edition
    • Microsoft Windows Server 2003 Datacenter Edition
    • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
    • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Internet Explorer 6.0?当用于
    • Microsoft Windows XP Professional Edition
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows Server 2003, Datacenter x64 Edition
    • Microsoft Windows Server 2003, Enterprise x64 Edition
    • Microsoft Windows Server 2003, Standard x64 Edition
    • Microsoft Windows Server 2003 Web Edition
    • Microsoft Windows Server 2003 Standard Edition
    • Microsoft Windows Server 2003 Enterprise Edition
    • Microsoft Windows Server 2003 Datacenter Edition
    • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
    • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Internet Explorer 6.0 SP1?当用于
    • Microsoft Windows 2000 Advanced Server
    • Microsoft Windows 2000 Datacenter Server
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows 2000 Server
  • Microsoft Internet Explorer 5.01 Service Pack 4?当用于
    • Microsoft Windows 2000 Advanced Server
    • Microsoft Windows 2000 Datacenter Server
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows 2000 Server
关键字:?
kbcode kbtshoot kbbug kbexpertiseinter kbsecurity kbsecvulnerability kbsurveynew KB976949
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