אינך במצב לא מקוון כעת, ממתין לחיבור לאינטרנט

מתקבלת הודעת שגיאת script מסוג "Type Mismatch" (סוג לא מתאים) של VBScript ב- Internet Explorer לאחר החלת עדכון אבטחה מצטבר 974455.

מבוא
עדכון אבטחה מצטבר 974455 עבור Internet Explorer (המתואר ב- MS09-054) הכניס בדיקות אבטחה נוספות מסוג "Type" בשיטות מסוימות כדי להתייחס לפגיעויות אבטחה ידועות. בתרחישים מסוימים, בדיקות סוג אלה עלולות לגרום לשגיאות script מסוג "Type Mismatch" בדפי אינטרנט המשתמשים ב- VBScript או בדפי אינטרנט המשתמשים בתערובת של VBScript ו- JavaScript.

לקבלת מידע נוסף על MS09-054, לחץ על מספר המאמר שלהלן כדי להציגו מתוך מאגר הידע Microsoft Knowledge Base:
974455MS09-054: עדכון אבטחה מצטבר עבור Internet Explorer (ייתכן שקישור זה מפנה לתוכן שחלק ממנו או כולו מופיע באנגלית)
מאפייני הבעיה
דפי אינטרנט המשתמשים ב- VBScript כשפת כתיבת script והמשתמשים בשיטה showModalDialog()‎ או showModelessDialog()‎ עשויים להיתקל בשגיאת script מסוג "Type Mismatch". Microsoft זיהתה את שלושת התרחישים הבאים שבהם עשויה להיות מוצגת שגיאת script מסוג "Type Mismatch":
  • showModalDialog()‎
    בתרחיש הראשון קיים מצב של העברת ערך Array()‎ כפרמטר לשיטה showModalDialog()‎ ב- VBScript. השיטה showModalDialog()‎ תומכת בארגומנט חובה אחד (sURL) ובשני ארגומנטים אופציונליים (vArguments ו- sFeatures). הפרמטר vArguments הוא פרמטר מסוג VARIANT המציין את הארגומנטים לשימוש בעת הצגת המסמך. אם איש הפיתוח צריך להעביר Array()‎ ישירות לפרמטר האופציונלי vArguments, תתרחש שגיאת script מסוג "Type Mismatch".

    לקבלת מידע נוסף על השיטה showModalDialog בקר בדף האינטרנט הבא של Microsoft MSDN:
  • showModelessDialog()‎
    בתרחיש השני קיים מצב של העברת ערך Array()‎ כפרמטר לשיטה showModelessDialog()‎ ב- VBScript. השיטה showModelessDialog()‎ תומכת בארגומנט חובה אחד (sURL) ובשני ארגומנטים אופציונליים(vArguments ו- sFeatures). הפרמטר vArguments הוא פרמטר מסוג VARIANT המציין את הארגומנטים לשימוש בעת הצגת המסמך. אם איש הפיתוח צריך להעביר Array()‎ ישירות לפרמטר האופציונלי vArguments, תתרחש שגיאת script מסוג "Type Mismatch".

    לקבלת מידע נוסף על השיטה ModelessDialog בקר בדף האינטרנט הבא של Microsoft MSDN:
  • returnValue
    בתרחיש השלישי מעורבת הגדרה מפורשת של המאפיין returnValue בחלון דו-שיח מודאלי. המאפיין returnValue הוא מאפיין קריאה/כתיבה שאין לו ערך ברירת מחדל. בהתאם לתיעוד ב- MSDN, המאפיין returnValue חל רק על אותם חלונות שנוצרו עם השיטה showModalDialog()‎. אם איש הפיתוח מנסה להגדיר מפורשות את המאפיין returnValue של חלון דו-שיח מודאלי, לערך Array()‎ ב- VBScript, תתרחש שגיאת script מסוג "Type Mismatch".

    לקבלת מידע נוסף על המאפיין return Value בקר בדף האינטרנט הבא של Microsoft MSDN:
עד כה, Microsoft לא הייתה עדה לשגיאות script מסוג "Type Mismatch" הנובעות מעדכון אבטחה מצטבר 974455 בדפי אינטרנט המשתמשים ב- JavaScript כשפת כתיבת script היחידה שלהם בצד-הלקוח. נראה כי מושפעים רק דפי אינטרנט המשתמשים בשיטה showModalDialog()‎, בשיטה showModelessDialog()‎, או במאפיין returnValue בתוך VBScript. אם דף האינטרנט מכיל תערובת הן של VBScript והן שלJavaScript, הוא עשוי להיות מושפע אם דף האינטרנט משתמש בשיטות או במאפיינים שתוארו לעיל בתוך VBScript או אם דף האינטרנט משתמש באובייקט VBArray. שימוש באובייקט VBArray אינו נפוץ, ותרחישים הכרוכים ב- VBArray לא יידונו במאמר Knowledge Base זה.
סיבה
עדכון אבטחה מצטבר עבור Internet Explorer ‏MS09-054 שוחרר כדי להתייחס לפגיעויות אבטחה שזוהו ב- Internet Explorer. כחלק מעדכון האבטחה המצטבר, Internet Explorer הכניסה בדיקות חדשות כנגד casting לא מכוון של פרמטרים מסוג VARIANT לסוגי נתונים מסוכנים. בדיקות האבטחה הנוספות מציבות מגבלות אבטחה נוספות על פרמטרים מסוג VARIANT המועברים כחלק מהמשתנים המבוקרים על-ידי המשתמש כדי להגן על המשתמש מפני סוגי התקפה מסוימים. בדיקות נוספות אלו עלולות להשפיע על תרחישי גלישה לגיטימיים המשתמשים בסוגי נתונים VARIANT.
פתרון הבעיה
כדי לפתור בעיה זו, התקן את עדכון 976749 לאחר התקנת עדכון האבטחה 974455. לקבלת מידע נוסף בנושא זה, לחץ על מספר המאמר שלהלן כדי להציגו מתוך מאגר הידע Microsoft Knowledge Base:
976749זמין עדכון עבור Internet Explorer שפותר בעיות המתרחשות לאחר החלת עדכון אבטחה 974455 (MS09-054)

חשוב אל תתקין את עדכון 976749 אם לא התקנת את עדכון האבטחה 974455. אם תתקין את עדכון האבטחה 976749 בלי להתקין תחילה את עדכון האבטחה 974455, אזי Internet Explorer עשוי שלא לפעול כהלכה. במקרה זה, הסר את התקנת העדכון 976749, התקן את עדכון האבטחה 974455, ולאחר מכן התקן שוב את עדכון 976749.
דרכים לעקיפת הבעיה
מומלץ להמשיך ולהחיל את עדכון האבטחה המצטבר 974455 ולהתקין את עדכון 976749 אם אתה נתקן בתסמינים המתוארים במאמר זה. לקוחות המחליטים להסיר את עדכון האבטחה המצטבר מסכנים את המערכות שלהם.

עבור התרחיש הראשון והתרחיש השני הנדונים בסעיף "מאפייני הבעיה", ניתן להשתמש בפתרון עוקף אם אינך רוצה להתקין את עדכון האבטחה 974455. כדי לעקוף את הבעיה, הצהר מפורשות את המשתנה Array()‎ בתוך משתנה VBScript. ניתן להעביר מערכים אל השיטות showModalDialog()‎ או showModelessDialog()‎ בלי שגיאת script מסוג "Type Mismatch".

לדוגמה, VBScript יגרום לשגיאת script מסוג "Type Mismatch".
‎// TYPE MISMATCHvReturn = window.showModalDialog("http://www.contoso.com", Array(1,2,3,4,5,6,7))‎
VBScript הבא יעביר מערך אל השיטות showModialDialog()‎ או showModelessDialog()‎ בלי שגיאת script מסוג "Type Mismatch".
‎// NO TYPE MISMATCH ERRORDim myArraymyArray=Array(1,2,3,4,5,6,7)‎vReturn = window.showModalDialog("http://www.contoso.com", myArray)‎
עבור התרחיש השלישי הנדון לעיל, ניתן להשתמש בפתרון עוקף אם אינך רוצה להתקין את עדכון האבטחה 974455. כדי לעקוף את הבעיה בתרחישים שבהם ערך Array()‎ חד-ממדי מועבר אל המאפיין returnValue, השתמש בפונקציות Join ו- Split של VBScript. כך ניתן להעביר ערכי Array()‎ אל המאפיין returnValue.

לדוגמה, VBScript יגרום לשגיאת script מסוג "Type Mismatch".
‎// TYPE MISMATCHDim arrayItemsarrayItems(0) = 1arrayItems(1) = 2arrayItems(2) = 3Window.returnvalue = arrayItems
כאשר משתמשים בפונקציות Join ו- Split של VBScript, ניתן להגדיר את המאפיין returnValue בלי לגרום לשגיאת script מסוג "Type Mismatch".
‎// NO TYPE MISMATCH ERRORDim arrayItemsarrayItems(0) = 1arrayItems(1) = 2arrayItems(2) = 3Dim arrString = Join(arrayItems, ";")‎Window.returnvalue = arrStringDim strTemp = window.showModalDialog(……)‎Dim arrayItems = Split(strTemp, ";")‎
עבור התרחיש השלישי שנתון לעיל, היכן שערכי Array()‎ רב-ממדיים או ערכי Array()‎ בעלי אובייקטים מועברים אל המאפיין returnValue, ניתן לממש פתרון עוקף אם אינך רוצה להתקין את עדכון האבטחה 974455. כדי לעקוף את הבעיה בתרחיש זה, ניתן להשתמש בפונקצית JavaScript להגדרת המאפיין returnValue. פונקצית JavaScript זו זמינה עבור שגרות-משנה ופונקציות של VBScript. כל ערך של מאפיין returnValue המוגדר על-ידי פונקציה של JavaScript תהיה זמינה ל- VBScript.

לדוגמה, VBScript יגרום לשגיאת script מסוג "Type Mismatch".
‎// TYPE MISMATCH<script LANGUAGE=vbscript>Option ExplicitSub Window_OnLoadDim abc(1,2,3)‎Window.ReturnValue = abcEnd Sub</script>
השימוש בפונקצית JavaScript בשילוב עם VBScript קיים מאפשר להגדיר את המאפיין returnValue בלי לגרום לשגיאת script מסוג "Type Mismatch".
‎// 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 ExplicitSub Window_OnLoadsetReturnValue()‎msgbox window.returnValueEnd Sub</script>
סטטוס
Microsoft אישרה כי מדובר בבעיה במוצרי Microsoft ששמותיהם מופיעים בסעיף 'חל על'.
מאפיינים:

מזהה פריט: 976949 - סקירה אחרונה: 12/01/2009 11:13:21 - תיקון: 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
משוב