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

Traduções de Artigos Traduções de Artigos
Artigo: 976949 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

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:
974455 MS09-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:
    http://msdn.microsoft.com/pt-pt/library/ms536759(VS.85).aspx
  • 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:
    http://msdn.microsoft.com/en-us/library/ms536761(VS.85).aspx/PathLink>
  • 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:
    http://msdn.microsoft.com/pt-pt/library/ms534371(VS.85).aspx
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:
976749 Está 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 MISMATCH
vReturn = 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 ERROR
Dim myArray
myArray=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 MISMATCH
Dim arrayItems
arrayItems(0) = 1
arrayItems(1) = 2
arrayItems(2) = 3
Window.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 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, ";")

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 Explicit
Sub Window_OnLoad
Dim abc(1,2,3)
Window.ReturnValue = abc
End 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 Explicit

Sub Window_OnLoad
setReturnValue()
msgbox window.returnValue
End 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

Artigo: 976949 - Última revisão: 3 de dezembro de 2009 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Windows Internet Explorer 8 nas seguintes plataformas
    • 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 nas seguintes plataformas
    • 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 nas seguintes plataformas
    • 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 nas seguintes plataformas
    • 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 nas seguintes plataformas
    • Microsoft Windows 2000 Advanced Server
    • Microsoft Windows 2000 Datacenter Server
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows 2000 Server
Palavras-chave: 
kbcode kbtshoot kbbug kbexpertiseinter kbsecurity kbsecvulnerability kbsurveynew KB976949

Submeter comentários

 

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