После установки накопительного обновления для системы безопасности 974455 в сценарии VBScript при просмотре веб-страниц в браузере Internet Explorer возникает ошибка и выводится сообщение "Несоответствие типов"

Переводы статьи Переводы статьи
Код статьи: 976949 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

ВВЕДЕНИЕ

В накопительном обновлении 974455 (описывается в бюллетене по безопасности (Майкрософт) MS09-054) содержались дополнительные проверки безопасности типов различных методов, предназначенные для устранения обнаруженных уязвимостей системы безопасности. В некоторых условиях эти проверки могли приводить к возникновению ошибок сценариев "Несоответствие типов" на веб-страницах, использующих сценарии VBScript, или веб-страницах, использующих сочетание сценариев VBScript и JavaScript.

Дополнительные сведения об обновлении MS09-054 см. в следующей статье базы знаний Майкрософт:
974455 MS09-054: накопительное обновление для системы безопасности обозревателя Internet Explorer

Проблема

Веб-страницы, на которых в качестве клиентского языка сценариев используется VBScript и применяется метод showModalDialog() или showModelessDialog(), может возникать ошибка сценария "Несоответствие типов". Корпорация Майкрософт определила три сценария, при которых может возникнуть такая ошибка.
  • showModalDialog()
    В первом сценарии значение Array() используется в качестве параметра метода showModalDialog() в VBScript. Метод showModalDialog() поддерживает один обязательный аргумент (sURL) и два дополнительных (vArguments и sFeatures). Параметр vArguments относится к типу VARIANT, который указывает аргументы, используемые при отображении документа. Если разработчик решает передать значение Array() напрямую дополнительному параметру vArguments, возникает ошибка сценария "Несоответствие типов".

    Дополнительные сведения о методе showModalDialog см. на следующем веб-сайте MSDN:
    http://msdn.microsoft.com/ru-ru/library/ms536759(VS.85).aspx
  • showModelessDialog()
    Во втором сценарии значение Array() используется в качестве параметра метода showModelessDialog() в VBScript. Метод showModelessDialog() поддерживает один обязательный аргумент (sURL) и два дополнительных (vArguments и sFeatures). Параметр vArguments относится к типу VARIANT, который указывает аргументы, используемые при отображении документа. Если разработчик решает передать значение Array() напрямую дополнительному параметру vArguments, возникает ошибка сценария "Несоответствие типов".

    Дополнительные сведения о методе showModelessDialog() см. на следующем веб-сайте MSDN:
    http://msdn.microsoft.com/en-us/library/ms536761(VS.85).aspx/PathLink>
  • returnValue
    В третьем сценарии используется явная установка свойства модального диалогового окна returnValue. Свойство returnValue является свойством для чтения и записи и не обладает значением по умолчанию. Согласно документации, доступной в сети MSDN, свойство returnValue применяется только к окнам, создаваемым с помощью метода showModalDialog(). Если разработчик решает явно установить для свойства модального диалогового окна returnValue в VBScript значение Array(), возникнет сообщение об ошибке "Несоответствие типов".

    Дополнительные сведения о свойстве return Value см. на следующем веб-сайте MSDN:
    http://msdn.microsoft.com/en-us/library/ms534303(VS.85).aspx
На данный момент корпорации Майкрософт неизестно об ошибках "Несоответствие типов", возникающих из-за накопительного обновления для системы безопасности 974455 на веб-страницах, использующих JavaScript в качестве единственного клиентского языка сценариев. Этой проблеме подвержены только страницы, на которых используется метод showModalDialog() или showModelessDialog(), либо свойство returnValue в сценарии VBScript. Если веб-страница содержит и VBScript, и JavaScript, она может быть подвержена этой проблеме в случае, когда на ней используются описанные выше методы или свойства VBScript, либо когда на ней используется объект VBArray. Использование объекта VBArray не распространено, поэтому сценарии, связанные с этим объемктов, не будут рассмотрены в этой статье базы знаний.

Причина

Накопительное обновление MS09-054 выпущено с целью устранения обнаруженных уязвимостей системы безопасности браузера Internet Explorer. В это обновление входят новые проверки, направленные на защиту от непреднамеренного приведения параметров типа VARIANT в опасные типы данных. Они приводят к возникновению дополнительных ограничений безопасности параметров типа VARIANT, которые передаются как часть управляемых пользователем переменных с целью защиты пользователя от определенных типов атак. Они могут повлиять на допустимые сценарии просмотра, в которых используются типы данных VARIANT.

Решение

Чтобы решить эту проблему, перед установкой обновления 976749 необходимо установить обновление для системы безопасности 974455. Дополнительные сведения об этой проблеме см. в следующей статье базы знаний Майкрософт:
976749 Для браузера Internet Explorer выпущено обновление, которое устраняет проблемы, возникшие после установки обновления для системы безопасности 974455 (MS09-054)

Важно. Не устанавливайте данное обновление, если на компьютере не установлено обновление для системы безопасности 974455. В противном случае могут возникнуть неполадки в работе браузера Internet Explorer. Если обновления установлены в неправильном порядке, удалите данное обновление, установите обновление для системы безопасности 974455 и снова установите данное обновление.

Временное решение

Рекомендуется продолжить применение накопительного обновления для системы безопасности 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 Join и Split. Это позволит передавать значения 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 нежелательно. Для этого можно задать свойство returnValue с помощью функции JavaScript. Она доступна для подпрограмм и функций VBScript. Любое свойство returnValue, установленное функцией JavaScript, будет доступно для 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>

Статус

Данное поведение является подтвержденной ошибкой продуктов Майкрософт, перечисленных в разделе "Информация в данной статье применима к".

Свойства

Код статьи: 976949 - Последний отзыв: 3 декабря 2009 г. - Revision: 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
    • 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 (32-bit x86)
    • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
    • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
    • 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
    • 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 (32-bit x86)
    • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
    • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
    • 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
    • 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 (32-bit x86)
    • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
    • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
    • 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

Отправить отзыв

 

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