Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

ВВЕДЕНИЕ

В накопительном обновлении 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:

    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>

Статус

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

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×