安裝累積安全性更新 974455 後,您在 Internet Explorer 中收到 VBScript「類型不符」指令碼錯誤訊息

文章翻譯 文章翻譯
文章編號: 976949 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

簡介

Internet Explorer 的累積安全性更新 974455 (於 MS09-054 中所述) 會將額外的「類型」安全性檢查引用到各種方法以解決可辨識的安全性弱點。在特定情況下,這些新的類型安全性檢查可能會在使用 VBScrip 的網頁中,或者在混合使用 VBScript 和 JavaScript 的網頁中,導致「類型不符」指令碼錯誤。

如需有關 MS09-054 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
974455 MS09-054:Internet Explorer 的累積安全性更新

徵狀

使用 VBScript 做為用戶端指令碼語言以及使用 showModalDialog() 或 showModelessDialog() 方法的網頁,可能會遇到「類型不符」指令碼錯誤。Microsoft 已發現下列三種情況會產生「類型不符」指令碼錯誤:
  • showModalDialog()
    第一種情況為當您將 Array() 值做為參數傳遞至 VBScript 中的 showModalDialog() 方法時。showModalDialog() 方法支援一個必要的引數 (sURL) 及兩個選用的引數 (vArguments 和 sFeatures)。vArguments 參數是一個 VARIANT 類型參數,可在顯示文件時指定要使用的引數。如果開發人員決定直接將 Array() 傳遞到選用的 vArguments 參數,則會發生「類型不符」指令碼錯誤。

    如需有關 showModalDialog 方法的詳細資訊,請造訪下列 Microsoft MSDN 網頁 :
    http://msdn.microsoft.com/zh-tw/library/ms536759(VS.85).aspx
  • showModelessDialog()
    第二種情況為當您將 Array() 值做為參數傳遞至 VBScript 中的 showModelessDialog() 方法時。showModelessDialog() 方法支援一個必要的引數 (sURL) 及兩個選用的引數 (vArguments 和 sFeatures)。vArguments 參數是一個 VARIANT 類型參數,可在顯示文件時指定要使用的引數。如果開發人員決定直接將 Array() 傳遞到選用的 vArguments 參數,則會發生「類型不符」指令碼錯誤。

    如需有關 showModelessDialog 方法的詳細資訊,請造訪下列 Microsoft MSDN 網頁 :
    http://msdn.microsoft.com/en-us/library/ms536761(VS.85).aspx/PathLink>
  • returnValue
    第三種情況為 [Modal Dialog] 視窗的 returnValue 屬性明確設定。returnValue 屬性為可讀取/寫入的屬性,沒有預設值。根據 MSDN 的說明文件,returnValue 屬性只適用於使用 showModalDialog() 方法建立的視窗。如果開發人員決定將 [Modal Dialog] 視窗的 returnValue 屬性明確設定為 VBScript 中的 Array() 值,則會發生「類型不符」指令碼錯誤。

    如需有關 return Value 屬性的詳細資訊,請造訪下列 Microsoft MSDN 網頁 :
    http://msdn.microsoft.com/zh-tw/library/ms534371(VS.85).aspx
Microsoft 目前尚未發現使用 JavaScript 做為其單一用戶端指令碼語言之網頁中的累積安全性更新 974455,有產生「類型不符」指令碼錯誤的狀況。只有在 VBScript 中使用 showModalDialog() 方法、showModelessDialog() 方法或 returnValue 屬性的網頁會受到影響。如果網頁同時包含 VBScript 和 JavaScript,且使用在 VBScript 中稍早所述的方法或屬性,或如果使用 VBArray 物件,則該網會便會受到影響。使用 VBArray 物件的狀況不常見,因此此知識庫文件將不涵蓋有關 VBArray 的情況。

發生的原因

Internet Explorer 累積安全性更新 MS09-054 發行的目的在於解決 Internet Explorer 中可識別的安全性弱點。做為累積安全性更新的一部分,Internet Explorer 會引用新的檢查,以免將 VARIANT 類型參數錯誤轉換成危險的資料類型。為了保護使用者免於遭受特定類型的攻擊,額外的安全性檢查會對用來傳遞為部分使用者控制之變數的 VARIANT 類型參數,增加更多的安全性限制。這些額外的檢查可能會影響使用 VARIANT 資料型類進行正常瀏覽的情況。

解決方案

如果要解決這個問題,請在安裝安全性更新 974455 之後,安裝更新 976749。 如需有關這個問題的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
976749 已有可用的 Internet Explorer 更新可以解決在您套用安全性更新 974455 (MS09-054) 之後發生的問題

重要 如果您尚未安裝安全性更新 974455,則請勿安裝更新 976749。如果您沒有先安裝安全性更新 974455 就安裝更新 976749,Internet Explorer 可能無法正常運作。如果發生這種情況,請解除安裝更新 976749、安裝安全性更新 974455,然後重新安裝更新 976749。

其他可行方案

如果您遇到本文所述的徵狀,我們建議您持續套用累積安全性更新 974455並安裝更新 976749。決定移除累積安全性更新的客戶將使其系統處於危險之中。

如果您遇到<徵狀>一節所述的第一種和第二種情況,但不想安裝安全性更新 974455 的話,您可以執行解決方案。如果要解決這個問題,請將 Array() 變數明確宣告為 VBScript 變數。陣列便可傳遞至 showModalDialog() 或 showModelessDialog() 方法,而不會發生「類型不符」指令碼錯誤。

舉例來說,下列 VBScript 會造成「類型不符」指令碼錯誤。
// TYPE MISMATCH
vReturn = window.showModalDialog("http://www.contoso.com", Array(1,2,3,4,5,6,7))
下列 VBScript 可將陣列傳遞至 showModialDialog() 或 showModelessDialog() 方法,而不會發生「類型不符」指令碼錯誤。
// NO TYPE MISMATCH ERROR
Dim myArray
myArray=Array(1,2,3,4,5,6,7)
vReturn = window.showModalDialog("http://www.contoso.com", myArray)
如果您遇到稍早所述的第三種情況,但不想安裝安全性更新 974455 的話,您可以執行解決方案。如果要解決單一維度 Array() 值傳遞至 returnValue 屬性的問題,請使用聯結與獨立 VBScript 函數。此功能可讓您將 Array() 值傳遞至 returnValue 屬性。

舉例來說,下列 VBScript 會產生「類型不符」指令碼錯誤。

// TYPE MISMATCH
Dim arrayItems
arrayItems(0) = 1
arrayItems(1) = 2
arrayItems(2) = 3
Window.returnvalue = arrayItems
當您使用聯結與獨立 VBScript 函數時,您可以設定 returnValue 屬性,而不會產生「類型不符」指令碼錯誤。

// 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, ";")

如果您遇到稍早所述的第三種情況,也就是多維度 Array() 值或包含物件的 Array() 值傳遞至 returnValue 屬性,但不想安裝安全性更新 974455 的話,您可以執行解決方案。如果要解決此情況中的問題,您可以使用 JavaScript 函數來設定 returnValue 屬性。VBScript 副程式和函數可使用此 JavaScript 函數。VBScript 將可使用任何由 JavaScript 函數所設定的 returnValue 屬性值。

舉例來說,下列 VBScript 會產生「類型不符」指令碼錯誤。
// TYPE MISMATCH
<script LANGUAGE=vbscript>
Option Explicit
Sub Window_OnLoad
Dim abc(1,2,3)
Window.ReturnValue = abc
End Sub
</script>
將 JavaScript 函數與現有的 VBScript 搭配使用可讓您設定 returnValue 屬性,而不會產生「類型不符」指令碼錯誤。
// 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>

狀況說明

Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。

屬性

文章編號: 976949 - 上次校閱: 2009年12月3日 - 版次: 3.1
這篇文章中的資訊適用於:
  • Windows Internet Explorer 8?應用於:
    • 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 商用入門版
    • Windows Vista 商用進階版
    • Windows Vista 家用入門版
    • Windows Vista 家用進階版
    • Windows Vista 旗艦版
    • Windows Vista 商用進階 64 位元版
    • Windows Vista 家用入門 64 位元版
    • Windows Vista 家用進階 64 位元版
    • Windows Vista 旗艦 64 位元版
    • Windows Vista 商用入門 64 位元版
    • 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?應用於:
    • 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 商用入門版
    • Windows Vista 商用進階版
    • Windows Vista 家用入門版
    • Windows Vista 家用進階版
    • Windows Vista 旗艦版
    • Windows Vista 商用進階 64 位元版
    • Windows Vista 家用入門 64 位元版
    • Windows Vista 家用進階 64 位元版
    • Windows Vista 旗艦 64 位元版
    • Windows Vista 商用入門 64 位元版
    • 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?應用於:
    • 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?應用於:
    • 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?應用於:
    • Microsoft Windows 2000 Advanced Server
    • Microsoft Windows 2000 Datacenter Server
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows 2000 Server
關鍵字:?
kbcode kbtshoot kbbug kbexpertiseinter kbsecurity kbsecvulnerability kbsurveynew KB976949
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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