Po zainstalowaniu zbiorczej aktualizacji zabezpieczeń 974455 w programie Internet Explorer jest zwracany komunikat o błędzie skryptu języka VBScript „Type Mismatch” (Niezgodność typów)

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 976949 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

WPROWADZENIE

W ramach zbiorczej aktualizacji zabezpieczeń 974455 dla programu Internet Explorer (opisanej w biuletynie zabezpieczeń MS09-054) w różnych metodach wprowadzono dodatkowe testy zabezpieczeń dotyczące typów w celu rozwiązania wykrytych luk w zabezpieczeniach. W niektórych sytuacjach te nowe testy zabezpieczeń dotyczące typów mogą powodować błędy skryptów „Niezgodność typów” na stronach sieci Web z zastosowaniem języka VBScript bądź połączenia języków VBScript i JavaScript.

Aby uzyskać więcej informacji na temat biuletynu MS09-054, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
974455 MS09-054: Zbiorcza aktualizacja zabezpieczeń dla programu Internet Explorer

Symptomy

Na stronach sieci Web z zastosowaniem języka VBScript jako języka skryptowego po stronie klienta oraz metody showModalDialog() lub showModelessDialog() mogą występować błędy skryptów „Niezgodność typów”. Firma Microsoft ustaliła, że błąd skryptu „Niezgodność typów” może zostać wygenerowany w następujących trzech scenariuszach:
  • Metoda showModalDialog()
    W pierwszym scenariuszu w języku VBScript do metody showModalDialog() jest przekazywana jako parametr wartość Array(). Metoda showModalDialog() obsługuje jeden argument wymagany (sURL) i dwa argumenty opcjonalne (vArguments i sFeatures). Parametr vArguments jest typu VARIANT i określa argumenty, które mają zostać użyte podczas wyświetlania dokumentu. Jeśli deweloper zdecyduje o przekazaniu wartości Array() bezpośrednio do parametru opcjonalnego vArguments, wystąpi błąd skryptu „Niezgodność typów”.

    Aby uzyskać więcej informacji na temat metody showModalDialog, odwiedź następującą stronę MSDN firmy Microsoft w sieci Web:
    http://msdn.microsoft.com/pl-pl/library/ms536759(VS.85).aspx
  • Metoda showModelessDialog()
    W drugim scenariuszu w języku VBScript do metody showModelessDialog() jest przekazywana jako parametr wartość Array(). Metoda showModelessDialog() obsługuje jeden argument wymagany (sURL) i dwa argumenty opcjonalne (vArguments i sFeatures). Parametr vArguments jest typu VARIANT i określa argumenty, które mają zostać użyte podczas wyświetlania dokumentu. Jeśli deweloper zdecyduje o przekazaniu wartości Array() bezpośrednio do parametru opcjonalnego vArguments, wystąpi błąd skryptu „Niezgodność typów”.

    Aby uzyskać więcej informacji na temat metody showModelessDialog, odwiedź następującą stronę MSDN firmy Microsoft w sieci Web:
    http://msdn.microsoft.com/en-us/library/ms536761(VS.85).aspx/PathLink>
  • Właściwość returnValue
    W trzecim scenariuszu jest jawnie ustawiana właściwość returnValue modalnego okna dialogowego. Właściwość returnValue jest właściwością do odczytu i zapisu bez wartości domyślnej. Zgodnie z dokumentacją w witrynie MSDN właściwość returnValue dotyczy tylko okien utworzonych za pomocą metody showModalDialog(). Jeśli deweloper zdecyduje o jawnym ustawieniu właściwości returnValue modalnego okna dialogowego na wartość Array() w języku VBScript, wystąpi błąd skryptu „Niezgodność typów”.

    Aby uzyskać więcej informacji na temat właściwości returnValue, odwiedź następującą stronę MSDN firmy Microsoft w sieci Web:
    http://msdn.microsoft.com/pl-pl/library/ms534371(VS.85).aspx
Do tej pory firma Microsoft nie stwierdziła występowania błędów skryptów „Niezgodność typów” powodowanych przez zbiorczą aktualizację zabezpieczeń 974455 na stronach sieci Web z zastosowaniem języka JavaScript jako jedynego języka skryptowego po stronie klienta. Ten problem prawdopodobnie dotyczy tylko stron sieci Web z zastosowaniem metody showModalDialog() bądź showModelessDialog() lub właściwości returnValue w języku VBScript. Jeśli strona sieci Web zawiera kod w języku zarówno VBScript, jak i JavaScript, może być narażona na ten problem, o ile zastosowano w niej omówione wcześniej metody lub właściwości w części kodu języka VBScript lub jeśli zastosowano w niej obiekt VBArray. Obiekt VBArray jest rzadko używany i ten artykuł z bazy wiedzy nie zawiera omówienia scenariuszy z jego zastosowaniem.

Przyczyna

Zbiorcza aktualizacja zabezpieczeń MS09-054 dla programu Internet Explorer została opublikowana w celu rozwiązania wykrytych luk w zabezpieczeniach programu Internet Explorer. W ramach tej zbiorczej aktualizacji zabezpieczeń w programie Internet Explorer wprowadzono nowe testy zapobiegające nieodpowiedniemu rzutowaniu parametrów typu VARIANT na niebezpieczne typy danych. Te dodatkowe testy zabezpieczeń zwiększają poziom ograniczeń dotyczących parametrów typu VARIANT przekazywanych w ramach zmiennych sterowanych przez użytkownika w celu chronienia użytkownika przed określonego rodzaju atakami. Te dodatkowe testy mogą mieć wpływ na przeglądanie normalnych stron z zastosowaniem typów danych VARIANT.

Rozwiązanie

Aby rozwiązać ten problem, należy po zainstalowaniu aktualizacji zabezpieczeń 974455 zainstalować aktualizację 976749. Aby uzyskać więcej informacji dotyczących tego problemu, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
976749 Dostępna jest aktualizacja programu Internet Explorer, która rozwiązuje problemy występujące po zastosowaniu aktualizacji zabezpieczeń 974455 (MS09-054)

Ważne Nie należy instalować aktualizacji 976749, jeśli nie zainstalowano aktualizacji zabezpieczeń 974455. Zainstalowanie aktualizacji 976749 bez uprzedniego zainstalowania aktualizacji zabezpieczeń 974455 może spowodować niepoprawne działanie programu Internet Explorer. W takim przypadku należy odinstalować aktualizację 976749, zainstalować aktualizację zabezpieczeń 974455, a następnie ponownie zainstalować aktualizację 976749.

Obejście problemu

W przypadku wystąpienia symptomów opisanych w tym artykule zaleca się dalsze stosowanie zbiorczej aktualizacji zabezpieczeń 974455 oraz zainstalowanie aktualizacji 976749. Systemy klientów, którzy zdecydują o usunięciu tej zbiorczej aktualizacji zabezpieczeń, będą zagrożone.

W przypadku pierwszego i drugiego scenariusza z sekcji Symptomy można wdrożyć obejście problemu, jeśli użytkownik nie chce zainstalować aktualizacji zabezpieczeń 974455. Aby obejść ten problem, należy jawnie zadeklarować zmienną Array() (tablicę) jako zmienną języka VBScript. Tablice można przekazywać do metod showModalDialog() i showModelessDialog() bez wywoływania błędu skryptu „Niezgodność typów”.

Na przykład poniższy kod języka VBScript powoduje błąd skryptu „Niezgodność typów”.
// NIEZGODNOŚĆ TYPÓW
vReturn = window.showModalDialog("http://www.contoso.com", Array(1,2,3,4,5,6,7))
Poniższy kod języka VBScript powoduje przekazanie tablicy do metody showModalDialog() lub showModelessDialog() bez wywoływania błędu skryptu „Niezgodność typów”.
// BEZ NIEZGODNOŚCI TYPÓW
Dim mojaTablica
mojaTablica=Array(1,2,3,4,5,6,7)
vReturn = window.showModalDialog("http://www.contoso.com", mojaTablica)
W przypadku trzeciego z omówionych wcześniej scenariuszy można wdrożyć obejście problemu, jeśli użytkownik nie chce zainstalować aktualizacji zabezpieczeń 974455. Aby obejść problem powodowany przez przekazanie wartości tablicy jednowymiarowej Array() do właściwości returnValue, należy użyć funkcji Join i Split języka VBScript. Umożliwia to przekazywanie wartości Array() do właściwości returnValue.

Na przykład poniższy kod języka VBScript powoduje wygenerowanie błędu skryptu „Niezgodność typów”.

// NIEZGODNOŚĆ TYPÓW
Dim elementyTablicy
elementyTablicy(0) = 1
elementyTablicy(1) = 2
elementyTablicy(2) = 3
Window.returnvalue = elementyTablicy
Stosując funkcje Join i Split języka VBScript, można ustawiać właściwość returnValue, nie generując błędu skryptu „Niezgodność typów”.

// BEZ NIEZGODNOŚCI TYPÓW
Dim elementyTablicy
elementyTablicy(0) = 1
elementyTablicy(1) = 2
elementyTablicy(2) = 3

Dim ciagTablicy= Join(elementyTablicy, ";")
Window.returnvalue = ciagTablicy
Dim ciagTymczasowy= window.showModalDialog(……)
Dim elementyTablicy= Split(ciagTymczasowy, ";")

W przypadku trzeciego z omówionych wcześniej scenariuszy, w którym do właściwości returnValue są przekazywane wartości Array() wielowymiarowe bądź zawierające obiekty, można wdrożyć obejście problemu, jeśli użytkownik nie chce zainstalować aktualizacji zabezpieczeń 974455. Aby obejść problem w tym scenariuszu, można ustawić właściwość returnValue za pomocą funkcji języka JavaScript. Ta funkcja języka JavaScript jest dostępna w podprocedurach i funkcjach języka VBScript. Dowolna wartość właściwości returnValue ustawiona za pomocą funkcji języka JavaScript jest dostępna w języku VBScript.

Na przykład poniższy kod języka VBScript powoduje wygenerowanie błędu skryptu „Niezgodność typów”.
// NIEZGODNOŚĆ TYPÓW
<script LANGUAGE=vbscript>
Option Explicit
Sub Window_OnLoad
Dim abc(1,2,3)
Window.ReturnValue = abc
End Sub
</script>
Stosując funkcję języka JavaScript razem z istniejącym kodem języka VBScript, można ustawiać właściwość returnValue, nie generując błędu skryptu „Niezgodność typów”.
// BEZ NIEZGODNOŚCI TYPÓW
<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>

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Informacje zawarte w tym artykule dotyczą”.

Właściwości

Numer ID artykułu: 976949 - Ostatnia weryfikacja: 18 stycznia 2010 - Weryfikacja: 3.1
Informacje zawarte w tym artykule dotyczą:
  • Windows Internet Explorer 8 na następujących platformach
    • 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 na następujących platformach
    • 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 na następujących platformach
    • 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 na następujących platformach
    • 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 na następujących platformach
    • Microsoft Windows 2000 Advanced Server
    • Microsoft Windows 2000 Datacenter Server
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows 2000 Server
Słowa kluczowe: 
kbcode kbtshoot kbbug kbexpertiseinter kbsecurity kbsecvulnerability kbsurveynew KB976949

Przekaż opinię

 

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