Jesteś obecnie w trybie offline. Czekamy na ponowne połączenie z Internetem.

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)

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:
  • 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:
  • 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:
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:
976749Dostę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ÓWvReturn = 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ÓWDim mojaTablicamojaTablica=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ÓWDim elementyTablicyelementyTablicy(0) = 1elementyTablicy(1) = 2elementyTablicy(2) = 3Window.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ÓWDim elementyTablicyelementyTablicy(0) = 1elementyTablicy(1) = 2elementyTablicy(2) = 3Dim ciagTablicy= Join(elementyTablicy, ";")Window.returnvalue = ciagTablicyDim 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 ExplicitSub Window_OnLoadDim abc(1,2,3)Window.ReturnValue = abcEnd 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 ExplicitSub Window_OnLoadsetReturnValue()msgbox window.returnValueEnd 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

Identyfikator artykułu: 976949 — ostatni przegląd: 01/18/2010 11:49:45 — zmiana: 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
Opinia