Pomocí skriptu VBScript "Neshoda typu" se zobrazí chybová zpráva skriptu aplikace Internet Explorer po instalaci kumulativní aktualizace zabezpečení 974455

ÚVOD

Kumulativní aktualizace zabezpečení pro aplikaci Internet Explorer 974455 (popsaná v bulletinu MS09-054) zavedla další "typ" bezpečnostní kontroly do různých metod Chcete-li vyřešit zjištěné chyby zabezpečení. Za určitých okolností může způsobit tyto nové bezpečnostní kontroly typů "Neshoda typu" k chybám skriptů na webových stránkách, které používají jazyk VBScript nebo webové stránky, které používají směs jazyků VBScript a JavaScript.

Další informace o bulletinu MS09-054 klepněte na následující číslo článku databáze Microsoft Knowledge Base:
974455 MS09-054: Kumulativní aktualizace zabezpečení pro aplikaci Internet Explorer

Příznaky

Webové stránky, které používají VBScript jako skriptovací jazyk straně klienta a které používají metody showModalDialog() nebo showModelessDialog(), může dojít k chyba skriptu "Neshoda typu". Společnost Microsoft zjistila následující tři scénáře, ve kterých může být generován skript chybu "Neshoda typu":

  • showModalDialog()
    První scénář zahrnuje předávání hodnotu Array() jako parametr metodě showModalDialog() v jazyku VBScript. Metodu showModalDialog() podporuje jeden povinný argument (sURL) a dva nepovinné argumenty (vArguments a sFeatures). Parametr vArguments je VARIANTNÍ typ parametr, který určuje argumenty používané při zobrazení dokumentu. Pokud se vývojář rozhodne předat parametr volitelný vArguments přímo Array(), dojde k chyba skriptu "Neshoda typu".


    Další informace o metodě showModalDialog naleznete na následujícím webu Microsoft MSDN:

  • showModelessDialog()
    Druhý scénář zahrnuje předávání hodnotu Array() jako parametr pro metodu showModelessDialog() v jazyce VBScript. Metodu showModelessDialog() podporuje jeden povinný argument (sURL) a dva nepovinné argumenty (vArguments a sFeatures). Parametr vArguments je VARIANTNÍ typ parametr, který určuje argumenty používané při zobrazení dokumentu. Pokud se vývojář rozhodne předat parametr volitelný vArguments přímo Array(), dojde k chyba skriptu "Neshoda typu".



    Další informace o metodě showModelessDialog naleznete na následujícím webu Microsoft MSDN:

  • returnValue
    Třetí scénář zahrnuje explicitní nastavení vlastnosti returnValue modálního dialogového okna. ReturnValue vlastnost je vlastnost pro čtení i zápis, která nemá žádnou výchozí hodnotu. Podle dokumentace na webu MSDN returnValue vlastnost platí pouze pro okna vytvořená pomocí metody showModalDialog(). Pokud se vývojář rozhodne explicitně nastavit vlastnost returnValue modálního dialogového okna na hodnotu Array() v jazyce VBScript, skript chybu "Neshoda typu" dojde.


    Další informace o vlastnost vrátí hodnotu naleznete na následujícím webu Microsoft MSDN:

V současné době Microsoft nesplnila "Neshoda typu" skript chyby vzniklé kumulativní aktualizace na webových stránkách, které používají jazyk JavaScript jako jejich jediný skriptovací jazyk na straně klienta 974455. Zdá se být ovlivněn pouze webové stránky, které používají metodu showModalDialog(), metodu showModelessDialog() nebo returnValue vlastnost v rámci jazyka VBScript. Pokud webová stránka obsahuje směs jazyků VBScript a JavaScript, může mít vliv, pokud webová stránka používá metody nebo vlastnosti, které byly popsány dříve v rámci jazyka VBScript nebo pokud webová stránka používá objekt VBArray. Použití objektu VBArray není obvyklé a scénáře zahrnující objekt VBArray se nevztahuje tento článek znalostní báze Knowledge Base.

Příčina

Chcete-li vyřešit zjištěné chyby zabezpečení v aplikaci Internet Explorer byla vydána kumulativní aktualizace zabezpečení pro aplikaci Internet Explorer MS09-054 . Součástí kumulativní aktualizace zabezpečení aplikace Internet Explorer zavedla nové kontroly zaměřené na neúmyslné přetypování parametrů typu VARIANT na nebezpečné datové typy. Další bezpečnostní kontroly omezí parametry typu VARIANT, které jsou předávány jako součást proměnných řízených uživatelem s cílem chránit uživatele před určitými typy útoků. Tyto dodatečné kontroly může ovlivnit legitimní scénáře procházení, které používají typy dat VARIANT.

Řešení

Chcete-li vyřešit tento problém, nainstalujte aktualizaci 976749, po instalaci aktualizace zabezpečení 974455. Další informace o tomto problému klepněte na následující číslo článku databáze Microsoft Knowledge Base:
976749 Aktualizace je k dispozici pro aplikaci Internet Explorer, která řeší potíže, k nimž dochází po instalaci aktualizace zabezpečení 974455 (MS09-054)

Důležité: Pokud jste nenainstalovali aktualizaci zabezpečení 974455, neinstalujte aktualizaci 976749. Pokud nainstalujete aktualizaci 976749 první instalaci aktualizace zabezpečení 974455, aplikace Internet Explorer nefungují správně. Pokud k tomu dojde, odinstalujte aktualizaci 976749, nainstalujte aktualizaci zabezpečení 974455 a pak znovu nainstalujte aktualizaci 976749.


Jak potíže obejít

Doporučujeme nadále používat kumulativní aktualizaci zabezpečení 974455 a nainstalujte aktualizaci 976749, pokud se setkáváte s příznaky, které jsou popsány v tomto článku. Zákazníky, kteří rozhodnout, chcete-li odebrat kumulativní aktualizaci zabezpečení bude ohrozit jejich systémů.


U prvního a druhého scénáře, které jsou popsány v části "Příznaky" můžete implementovat alternativní řešení, pokud chcete nainstalovat aktualizaci zabezpečení 974455. Chcete-li tento problém vyřešit, explicitně deklarujte proměnnou Array() jako proměnnou jazyka VBScript. Pole může být předán showModalDialog() nebo showModelessDialog() bez skriptu chybu "Neshoda typu".

Například následující skript VBScript způsobí chybu skriptu "Neshoda typu".

// TYPE MISMATCHvReturn = window.showModalDialog("http://www.contoso.com", Array(1,2,3,4,5,6,7))

Následující skript VBScript předá pole metody showModalDialog() nebo showModelessDialog() bez skriptu chybu "Neshoda typu".
// NO TYPE MISMATCH ERRORDim myArray
myArray=Array(1,2,3,4,5,6,7)
vReturn = window.showModalDialog("http://www.contoso.com", myArray)

V případě třetího scénáře popsaného dříve můžete implementovat alternativní řešení, pokud chcete nainstalovat aktualizaci zabezpečení 974455. Chcete-li vyřešit problém v případech, kdy je předán jednorozměrné hodnoty Array() vlastnosti returnValue , pomocí funkce Join a Split jazyka VBScript. To vám umožní předávat hodnoty Array() vlastnosti returnValue .

Například následující skript VBScript způsobí chybu skriptu "Neshoda typu".

// TYPE MISMATCHDim arrayItems
arrayItems(0) = 1
arrayItems(1) = 2
arrayItems(2) = 3
Window.returnvalue = arrayItems

Při použití funkce Join a Split jazyka VBScript, můžete nastavit vlastnost returnValue bez generování skriptu chybu "Neshoda typu".

// NO TYPE MISMATCH ERRORDim 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, ";")


V případě třetího scénáře popsaného dříve, pokud vícedimenzionální hodnoty Array() nebo hodnoty Array(), jejichž objekty jsou předány returnValue vlastnost, můžete implementovat řešení v případě, že nechcete nainstalovat aktualizaci zabezpečení 974455. Chcete-li vyřešit tento problém v tomto scénáři, můžete nastavit vlastnost returnValue funkci jazyka JavaScript. Tato funkce jazyka JavaScript je k dispozici funkce a podprogramy jazyka VBScript. Jakákoli hodnota vlastnosti returnValue nastavené funkce jazyka JavaScript bude k dispozici v jazyku VBScript.



Například následující skript VBScript způsobí chybu skriptu "Neshoda typu".

// TYPE MISMATCH<script LANGUAGE=vbscript>
Option Explicit
Sub Window_OnLoad
Dim abc(1,2,3)
Window.ReturnValue = abc
End Sub
</script>

Pomocí funkce jazyka JavaScript existující VBScript umožňuje nastavit vlastnosti returnValue bez generování skriptu chybu "Neshoda typu".
// 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>

Stav

Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".
Vlastnosti

ID článku: 976949 - Poslední kontrola: 13. 1. 2017 - Revize: 2

Váš názor