Recebe uma mensagem de erro de script "Tipo incompatível" de VBScript no Internet Explorer depois de instalar a actualização de segurança cumulativa 974455

INTRODUÇÃO
A actualização de segurança cumulativa para o Internet Explorer 974455 (descrita em MS09-054) apresentou verificações de segurança de "Tipos" adicionais em vários métodos para corrigir vulnerabilidades de segurança identificadas. Em determinados cenários, estas novas verificações de segurança de tipos podem resultar em erros de script "Tipo Incompatível" em páginas Web que utilizam VBScript ou em páginas Web que utilizam uma mistura de VBScript e JavaScript.

Para mais informações sobre a actualização MS09-054, clique no número de artigo que se segue para visualizar o artigo na Base de Dados de Conhecimento da Microsoft:
974455MS09-054: Actualização de segurança cumulativa para o Internet Explorer
Sintomas
As páginas Web que utilizam VBScript como linguagem de script do lado do cliente e os métodos showModalDialog() ou showModelessDialog() podem encontrar um erro de script "Tipo Incompatível". A Microsoft identificou os três cenários seguintes nos quais poderá ser gerado um erro de script "Tipo Incompatível":
  • showModalDialog()
    O primeiro cenário envolve transmitir um valor Array() como parâmetro ao método showModalDialog() no VBScript. O método showModalDialog() suporta um argumento obrigatório (sURL) e dois argumentos opcionais (vArguments e sFeatures). O parâmetro vArguments é um parâmetro do tipo VARIANT que especifica os argumentos a utilizar ao apresentar o documento. Se um programador decidir transmitir um valor Array() directamente ao parâmetro opcional vArguments, ocorrerá um erro de script "Tipo Incompatível".

    Para mais informações sobre o método showModalDialog, visite a seguinte página Web do Microsoft MSDN:
  • showModelessDialog()
    O segundo cenário envolve transmitir um valor Array() como parâmetro ao método showModelessDialog() no VBScript. O método showModelessDialog() suporta um argumento obrigatório (sURL) e dois argumentos opcionais (vArguments e sFeatures). O parâmetro vArguments é um parâmetro do tipo VARIANT que especifica os argumentos a utilizar ao apresentar o documento. Se um programador decidir transmitir um valor Array() directamente ao parâmetro opcional vArguments, ocorrerá um erro de script "Tipo Incompatível".

    Para mais informações sobre o método showModelessDialog, visite a seguinte página Web do Microsoft MSDN:
  • returnValue
    O terceiro cenário envolve a definição explícita da propriedade returnValue de uma janela de Caixa de Diálogo Modal. A propriedade returnValue é de leitura/escrita e não tem nenhum valor predefinido. De acordo com a documentação no MSDN, a propriedade returnValue só se aplica às janelas criadas através do método showModalDialog(). Se um programador decidir definir explicitamente a propriedade returnValue de uma janela de Caixa de Diálogo Modal como um valor Array() no VBScript, ocorrerá um erro de script "Tipo Incompatível".

    Para mais informações sobre a propriedade return Value, visite a seguinte página Web do Microsoft MSDN:
Actualmente, a Microsoft não observou erros de script "Tipo Incompatível" resultantes da actualização de segurança cumulativa 974455 em páginas Web que utilizam JavaScript como respectiva linguagem de script do lado do cliente. Apenas as páginas Web que utilizam o método showModalDialog(), o método showModelessDialog() ou a propriedade returnValue no VBScript parecem ser afectadas. Se a página Web contiver uma mistura de VBScript e JavaScript, poderá ser afectada caso utilize os métodos ou propriedades abordados anteriormente no VBScript ou utilize o objecto VBArray. A utilização do objecto VBArray é pouco frequente e os cenários que envolvem VBArray não serão abrangidos por este artigo da Base de Dados de Conhecimento.
Causa
A actualização de segurança cumulativa para o Internet Explorer MS09-054 foi lançada para corrigir vulnerabilidades de segurança identificadas no Internet Explorer. Como parte da actualização de segurança cumulativa, o Internet Explorer introduziu novas verificações relativamente à conversão não pretendida dos parâmetros do tipo VARIANT em tipos de dados perigosos. As verificações de segurança adicionais impõem restrições de segurança adicionais aos parâmetros do tipo VARIANT que estão a ser transmitidos como parte de variáveis controladas pelo utilizador para protegê-lo contra determinados tipos de ataques. Estas verificações adicionais podem afectar cenários de navegação legítimos que utilizam tipos de dados VARIANT.
Resolução
Para resolver este problema, instale a actualização 976749 depois de instalar a actualização de segurança 974455. Para mais informações sobre este problema, clique no número de artigo seguinte para visualizar o artigo da Base de Dados de Conhecimento da Microsoft:
976749Está disponível uma actualização para o Internet Explorer que resolve problemas que ocorrem depois de aplicar a actualização de segurança 974455 (MS09-054)

Importante Não instale a actualização 976749 se não tiver instalado a actualização de segurança 974455. Se instalar a actualização 976749 sem instalar primeiro a actualização de segurança 974455, o Internet Explorer poderá não funcionar correctamente. Se isto ocorrer, desinstale a actualização 976749, instale a actualização de segurança 974455 e, em seguida, reinstale a actualização 976749.
Como contornar
Recomendamos que continue a aplicar a actualização de segurança cumulativa 974455 e que instale a actualização 976749 se verificar os sintomas descritos neste artigo. Os clientes que decidirem remover a actualização de segurança cumulativa colocarão os respectivos sistemas em risco.

Se não pretender instalar a actualização de segurança 974455, pode implementar uma solução para o primeiro e segundo cenários abordados na secção "Sintomas". Para contornar o problema, declare explicitamente a variável Array() numa variável de VBScript. As matrizes podem ser transmitidas aos métodos showModalDialog() ou showModelessDialog() sem um erro de script "Tipo Incompatível".

Por exemplo, o seguinte VBScript causará um erro de script "Tipo Incompatível".
// TYPE MISMATCHvReturn = window.showModalDialog("http://www.contoso.com", Array(1,2,3,4,5,6,7))
O seguinte VBScript transmitirá uma matriz aos métodos showModialDialog() ou showModelessDialog() sem um erro de script "Tipo Incompatível".
// NO TYPE MISMATCH ERRORDim myArraymyArray=Array(1,2,3,4,5,6,7)vReturn = window.showModalDialog("http://www.contoso.com", myArray)
Para o terceiro cenário abordado anteriormente, pode implementar uma solução se não pretender instalar a actualização de segurança 974455. Para contornar o problema em cenários em que é transmitido um valor Array() de dimensão única à propriedade returnValue, utilize as funções de VBScript Associar e Dividir. Isto permite transmitir os valores Array() à propriedade returnValue.

Por exemplo, o seguinte VBScript gera um erro de script "Tipo Incompatível".
// TYPE MISMATCHDim arrayItemsarrayItems(0) = 1arrayItems(1) = 2arrayItems(2) = 3Window.returnvalue = arrayItems
Quando utiliza as funções de VBScript Associar e Dividir, pode definir a propriedade returnValue sem gerar um erro de script "Tipo Incompatível".
// NO TYPE MISMATCH ERRORDim arrayItemsarrayItems(0) = 1arrayItems(1) = 2arrayItems(2) = 3Dim arrString = Join(arrayItems, ";")Window.returnvalue = arrStringDim strTemp = window.showModalDialog(……)Dim arrayItems = Split(strTemp, ";")
Para o terceiro cenário abordado anteriormente, em que são transmitidos valores Array() de dimensão múltipla ou valores Array() que têm objectos à propriedade returnValue, pode implementar uma solução se não pretender instalar a actualização de segurança 974455. Para contornar o problema neste cenário, pode utilizar uma função de JavaScript para definir a propriedade returnValue. Esta função de JavaScript está disponível para subrotinas e funções de VBScript. Qualquer valor da propriedade returnValue definido por uma função de JavaScript estará disponível para VBScript.

Por exemplo, o seguinte VBScript gera um erro de script "Tipo Incompatível".
// TYPE MISMATCH<script LANGUAGE=vbscript>Option ExplicitSub Window_OnLoadDim abc(1,2,3)Window.ReturnValue = abcEnd Sub</script>
Utilizando uma função de JavaScript com um VBScript existente permite definir a propriedade returnValue sem gerar um erro de script "Tipo Incompatível".
// 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>
Ponto Da Situação
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Propriedades

ID do Artigo: 976949 - Última Revisão: 12/03/2009 15:10:11 - Revisão: 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
Esta informação foi útil?