В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

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

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

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

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

    Дополнительные сведения о методе showModelessDialog() см. на следующем веб-сайте MSDN:
  • returnValue
    В третьем сценарии используется явная установка свойства модального диалогового окна returnValue. Свойство returnValue является свойством для чтения и записи и не обладает значением по умолчанию. Согласно документации, доступной в сети MSDN, свойство returnValue применяется только к окнам, создаваемым с помощью метода showModalDialog(). Если разработчик решает явно установить для свойства модального диалогового окна returnValue в VBScript значение Array(), возникнет сообщение об ошибке "Несоответствие типов".

    Дополнительные сведения о свойстве return Value см. на следующем веб-сайте MSDN:
На данный момент корпорации Майкрософт неизестно об ошибках "Несоответствие типов", возникающих из-за накопительного обновления для системы безопасности 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 MISMATCHvReturn = window.showModalDialog("http://www.contoso.com", Array(1,2,3,4,5,6,7))
Указанный ниже сценарий VBScript будет передавать массив методу showModialDialog() или showModelessDialog() без возникновения такой ошибки.
// NO TYPE MISMATCH ERRORDim myArraymyArray=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 MISMATCHDim arrayItemsarrayItems(0) = 1arrayItems(1) = 2arrayItems(2) = 3Window.returnvalue = arrayItems
При использовании функций VBScript Join и Split можно установить свойство returnValue без возникновения ошибки сценария "Несоответствие типов".
// NO TYPE MISMATCH ERRORDim arrayItemsarrayItems(0) = 1arrayItems(1) = 2arrayItems(2) = 3Dim arrString = Join(arrayItems, ";")Window.returnvalue = arrStringDim strTemp = window.showModalDialog(……)Dim arrayItems = Split(strTemp, ";")
В описанном выше третьем сценарии, в котором многомерные значения Array() или значения Array() с объектами передаются свойству returnValue, можно воспользоваться обходным способом решения проблемы, если устанавливать обновление для системы безопасности 974455 нежелательно. Для этого можно задать свойство returnValue с помощью функции JavaScript. Она доступна для подпрограмм и функций VBScript. Любое свойство returnValue, установленное функцией JavaScript, будет доступно для VBScript.

Например, указанный ниже сценарий VBScript приведет к возникновению ошибки сценария "Несоответствие типов".
// TYPE MISMATCH<script LANGUAGE=vbscript>Option ExplicitSub Window_OnLoadDim abc(1,2,3)Window.ReturnValue = abcEnd 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 ExplicitSub Window_OnLoadsetReturnValue()msgbox window.returnValueEnd Sub</script>
Статус
Данное поведение является подтвержденной ошибкой продуктов Майкрософт, перечисленных в разделе "Информация в данной статье применима к".
Свойства

Номер статьи: 976949 — последний просмотр: 12/03/2009 15:10:11 — редакция: 3.1

Windows Internet Explorer 8, Windows Internet Explorer 7, Microsoft Internet Explorer 6.0, Microsoft Internet Explorer 6.0 SP1, Microsoft Internet Explorer 5.01 Service Pack 4

  • kbcode kbtshoot kbbug kbexpertiseinter kbsecurity kbsecvulnerability kbsurveynew KB976949
Отзывы и предложения