Jelenleg nem kapcsolódik az internethez. Várakozás a kapcsolat helyreállítására

A 974455. számú összegző biztonsági frissítés telepítése után az Internet Explorer böngészőben típuseltérésről tájékoztató VBScript-hibaüzenet jelenhet meg

BEVEZETÉS
Az Internet Explorer böngésző 974455. számú összegző biztonsági frissítése, melyet a MS09-054 jelű biztonsági közlemény ismertet, típusellenőrzést vezetett be különféle metódusokba bizonyos biztonsági rések elhárítása érdekében. Egyes helyzetekben ezek az új biztonsági ellenőrzések típuseltérési hibát okozhatnak a VBScript-parancsfájlokat használó, illetve a VBScript- és JavaScript-kódot egyszerre futtató weblapokon.

Az MS09-054 jelű összegző biztonsági frissítésről a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
974455MS09-054: Összegző biztonsági frissítés az Internet Explorer programhoz
A jelenség
Típuseltérésről tájékoztató hibaüzenet jelenhet meg azoknak a weblapoknak az esetében, amelyek ügyféloldali parancsnyelvként VBScriptet alkalmaznak, és a showModalDialog() vagy a showModelessDialog() metódust is használják. A Microsoft megállapította, hogy az alábbi három esetben történhet típuseltérési hiba:
  • showModalDialog()
    Az első eset az, ha a VBScript-parancsfájl egy Array() értéket ad át paraméterként a showModalDialog() metódusnak. A showModalDialog() metódus egy kötelező argumentumot (sURL), illetve két nem kötelező argumentumot (vArguments és sFeatures) támogat. A vArguments paraméter egy VARIANT típusú paraméter, mely a dokumentum megjelenítésekor használandó argumentumokat határozza meg. Ha a fejlesztő úgy dönt, hogy Array() értéket ad át közvetlenül a nem kötelező vArguments paraméterként, az típuseltérési hibához vezet.

    A showModalDialog metódusról további tájékoztatást a Microsoft MSDN alábbi weblapján talál:
  • showModelessDialog()
    A második eset az, ha a VBScript-parancsfájl egy Array() értéket ad át paraméterként a showModelessDialog() metódusnak. A showModelessDialog() metódus egy kötelező argumentumot (sURL), illetve két nem kötelező argumentumot (vArguments és sFeatures) támogat. A vArguments paraméter egy VARIANT típusú paraméter, mely a dokumentum megjelenítésekor használandó argumentumokat határozza meg. Ha a fejlesztő úgy dönt, hogy Array() értéket ad át közvetlenül a nem kötelező vArguments paraméterként, az típuseltérési hibához vezet.

    A showModelessDialog metódusról további tájékoztatást a Microsoft MSDN alábbi weblapján talál:
  • returnValue
    A harmadik esetben egy modális párbeszédpanel returnValue értékének explicit beállítása okozza a problémát. A returnValue egy olvasható és írható tulajdonság, melynek nincs alapértelmezett értéke. Az MSDN webhelyen lévő dokumentáció szerint a returnValue tulajdonság kizárólag a showModalDialog() metódussal létrehozott ablakok esetében érvényes. Ha a fejlesztő úgy dönt, hogy egy modális párbeszédpanel returnValue tulajdonságának értékét explicit módon Array() értékre állítja, az típuseltérési VBScript-hibához vezet.

    A returnValue tulajdonságról további tájékoztatást a Microsoft MSDN alábbi weblapján talál:
A Microsoft eddigi eredményei szerint a 974455. számú összegző biztonsági frissítéssel kapcsolatos típuseltérési hiba nem jelentkezik azoknál a weblapoknál, amelyek kizárólag JavaScriptet használnak ügyféloldali parancsnyelvként. A probléma csak a VBScript környezetet, illetve azon belül is a showModalDialog() metódus, a showModelessDialog() metódus és a returnValue tulajdonság használatát érinti. A VBScript és a JavaScript parancsnyelvet vegyesen alkalmazó weblapok esetében a hiba a korábban tárgyalt metódusok és tulajdonság használatakor léphet fel, illetve akkor, ha a weblap VBArray objektumot használ. A VBArray objektum használata ritka, ezért a jelen cikk az ezzel kapcsolatos problémákat nem tárgyalja.
Oka
Az Internet Explorer böngésző MS09-054 jelű összegző biztonsági frissítése az Internet Explorer korábban azonosított biztonsági réseinek javítására lett kiadva. Az összegző biztonsági frissítés részeként új ellenőrzési lépéseket vezettünk be a VARIANT típusú paraméterek veszélyes adattípusokra való véletlen konvertálásának megelőzése érdekében. A hozzáadott biztonsági ellenőrzések tovább növelik a felhasználói változóként átadott VARIANT típusú paraméterekre vonatkozó megkötéseket, hogy ezzel megóvják a felhasználót bizonyos támadásokkal szemben. Ez a szigorúbb ellenőrzés a VARIANT adattípust szabályosan használható webhelyeket is érintheti.
A megoldás
A probléma elhárításához telepítse a 976749. számú frissítést, miután telepítette a 974455. számú biztonsági frissítést. A problémáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
976749Megjelent egy frissítés az Internet Explorer programhoz, amely a KB974455 (MS09-054) jelű biztonsági frissítés telepítése után bekövetkező problémák megszüntetéséhez szükséges

Fontos: Ha nem telepítette a 974455. számú biztonsági frissítést, ne telepítse a 976749. számú frissítést, ellenkező esetben előfordulhat, hogy az Internet Explorer böngésző nem fog megfelelően működni. Ha ez megtörténne, távolítsa el a 976749. számú frissítést, telepítse a 974455. számú biztonsági frissítést, majd telepítse újra a 976749. számú frissítést.
Kerülő megoldás
Ha a jelen cikkben ismertetett jelenségeket tapasztalja, tanácsos folytatni a 974455. számú összegző biztonsági frissítés telepítését, illetve telepíteni a 976749. számú frissítést. Az összegző biztonsági frissítés eltávolítása biztonsági kockázatot jelent.

A jelenségeket ismertető bekezdésben tárgyalt első és második helyzet esetén egy kerülő megoldást is alkalmazhat, ha nem kívánja telepíteni a 974455. számú biztonsági frissítést. A probléma kerülő megoldásához explicit módon deklarálnia kell az Array() változót egy VBScript változóvá. A tömbök showModalDialog() vagy showModelessDialog() metódusnak való átadása nem okoz típuseltérési hibát.

Az alábbi VBScript-kód például típuseltérési hibához vezet.
// TÍPUSELTÉRÉSI HIBAvReturn = window.showModalDialog("http://www.contoso.com", Array(1,2,3,4,5,6,7))
Az alábbi VBScript-kód típuseltérési hiba nélkül ad át egy tömböt a showModialDialog() vagy showModelessDialog() metódusnak.
// NINCS TÍPUSELTÉRÉSI HIBADim sajatTombsajatTomb=Array(1,2,3,4,5,6,7)vReturn = window.showModalDialog("http://www.contoso.com", sajatTomb)
A korábban ismertetett helyzetek közül a harmadiknál létezik egy kerülő megoldás arra az esetre, ha nem kívánja telepíteni a 974455. számú frissítést. Azokban az esetekben, amelyekben egy egydimenziós Array() értéket kell átadnia a returnValue tulajdonságnak, használja a Join és a Split VBScript-függvényt. Ily módon közvetve Array() értékeket is adhat át a returnValue tulajdonságnak.

Az alábbi VBScript-kód például típuseltérési hibát okoz.
// TÍPUSELTÉRÉSI HIBADim tombElemektombElemek(0) = 1tombElemek(1) = 2tombElemek(2) = 3Window.returnvalue = tombElemek
A Join és a Split VBScript-függvény használatakor típuseltérési hiba nélkül állíthatja be a returnValue tulajdonság értékét.
// NINCS TÍPUSELTÉRÉSI HIBADim tombElemektombElemek(0) = 1tombElemek(1) = 2tombElemek(2) = 3Dim tombSzoveg = Join(tombElemek, ";")Window.returnvalue = tombSzovegDim ideigSzoveg = window.showModalDialog(……)Dim tombElemek = Split(ideigSzoveg, ";")
Az alábbiakban a harmadik eset azon előfordulásainak kerülő megoldását láthatja, amelyeknél több dimenziós vagy objektumokat tartalmazó Array() értéket kell átadnia a returnValue tulajdonságnak. Kerülő megoldásként itt JavaScript-függvénnyel kell beállítania a returnValue tulajdonság értékét. A használandó JavaScript-függvény elérhető VBScript-szubrutinokkal és -függvényekkel, és a returnValue tulajdonság JavaScript-függvénnyel beállított értéke is elérhető marad a VBScript-parancsfájlnak.

Az alábbi VBScript-kód például típuseltérési hibát okoz.
// TÍPUSELTÉRÉSI HIBA<script LANGUAGE=vbscript>Option ExplicitSub Window_OnLoadDim abc(1,2,3)Window.ReturnValue = abcEnd Sub</script>
A JavaScript-függvény meglévő VBScript-kóddal való együttes használata lehetővé teszi, hogy típuseltérési hiba nélkül állítsa be a returnValue tulajdonság értékét.
// NINCS TÍPUSELTÉRÉSI HIBA<script Language=JavaScript>function visszateresiErtekBeall(){var visszateresiErtekTomb = new Array();visszateresiErtekTomb[0] = 1;visszateresiErtekTomb[1] = 2;visszateresiErtekTomb[2] = 3;window.returnValue = visszateresiErtekTomb;}</script><script LANGUAGE=vbscript??Option ExplicitSub Window_OnLoadvisszateresiErtekBeall()msgbox window.returnValueEnd Sub</script>
Állapot
A Microsoft megerősítette, hogy a cikkben tárgyalt jelenség az érintett termékek hibájára vezethető vissza.
Tulajdonságok

Cikkazonosító: 976949 - Utolsó ellenőrzés: 12/03/2009 15:21:00 - Verziószám: 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
  • kbtshoot kbbug kbsecvulnerability kbsecurity kbcode kbexpertiseinter kbsurveynew KB976949
Visszajelzés
>