פתרון שגיאות של קוד אימות הודעות מצב תצוגה (MAC)

מהו מצב תצוגה?

מצב תצוגה הוא מידע הנוצר בעיגול בין דפי WebForms (. aspx) ביישום ASP.NET. הסימון בתבנית HTML עבור השדה _ VIEWSTATE דומה לדלהלן:

< סוג הקלט = "מוסתר" שם = "המילה _ מדינה" מזהה = "_ מדינה" הערך = "..."/>דוגמה אחת של פריט שעשוי להיות מאוחסן בשדה _ מצב תצוגה (viewstate) הוא הטקסט של פקד לחצן. אם משתמש לוחץ על הלחצן, מטפל האירוע Button_Click יוכל לחלץ את הטקסט של הלחצן מהשדה ' מצב תצוגה '. עיין בנושא ' סקירת מצב ASP.NET View ' באתר האינטרנט של רשת המפתחים של MICROSOFT (MSDN) לקבלת סקירה מפורטת הרבה יותר של מצב תצוגת ASP.NET. הואיל והשדה מכיל מידע חשוב המשמש לשחזור העמוד ב-postback, ודא שאין לתוקף אפשרות לטפל בשדה זה. אם תוקף הגיש מטען זדוני שאינו מזיק ל-VIEWSTATE, התוקף עלול לגרום ליישום לבצע פעולה שאחרת לא הייתה מבצעת. כדי למנוע התקפה מסוג זה של שיבוש, השדה _ מדינה של האשנב מוגן על-ידי קוד אימות הודעה (MAC). ASP.NET מאמת את ה-MAC שנשלח יחד עם תוכן המנה _ VIEWSTATE בעת התרחשות postback. המפתח המשמש לחישוב ה-MAC מצוין ברכיב היישום בקובץ Web. config. מכיוון שהתוקף אינו יכול לנחש את התוכן של הרכיב < מ> המכונה, התוקף אינו יכול לספק MAC חוקי אם התוקף ינסה לשנות את התוכן של ה-VIEWSTATE. ASP.NET יזהה כי MAC חוקי לא סופק, ו ASP.NET תדחה את הבקשה זדוני.

מה גורם לשגיאות אימות של MAC?

שגיאת אימות MAC תהיה דומה לדוגמה הבאה:

שגיאת שרת ביישום '/'. אימות ה-MAC של מצב התצוגה נכשל. אם יישום זה מתארח בחוות האינטרנט או באשכול, ודא שהתצורה של < מ> המכונה מציינת את אותו מפתח אימות ואלגוריתם אימות. אין אפשרות להשתמש ביצירה אוטומטית באשכול. תיאור: חריג שאינו מטופל אירע במהלך ביצוע בקשת האינטרנט הנוכחית. נא סקור את מעקב המחסנית לקבלת מידע נוסף אודות השגיאה והיכן מקורו בקוד. פרטי החריגה: System. Web., מערכת החריגה: אימות של MAC state נכשל. אם יישום זה מתארח על-ידי חוות אינטרנט או אשכול, ודא שהתצורה של < מ> המכונה מציינת את אותו אלגוריתם אימות ומקש התיקוף. אין אפשרות להשתמש ביצירה אוטומטית באשכול. שגיאת מקור: [אין קווי מקור רלוונטיים] קובץ מקור:... שורה: 0 מעקב אחר מחסנית: [מפרט תצוגה: מצב תצוגה לא חוקי. IP לקוח::: 1 כניסה: 40653 המפנה: http://localhost:40643/MyPage.aspx נתיב:/Mypage.msb סוכן משתמש: Mozilla/5.0 (תואם; MSIE 10.0; Windows NT 6.2; WOW64 טריידנט/6.0) מדינת אשנב:...] [HttpException (0x80004005): אימות של MAC של מדינת התצוגה נכשל. אם יישום זה מתארח על-ידי חוות אינטרנט או אשכול, ודא שהתצורה של < מ> המכונה מציינת את אותו אלגוריתם אימות ומקש התיקוף. אין אפשרות להשתמש ביצירה אוטומטית באשכול. ראה http://go.microsoft.com/fwlink/?LinkID=314055 לקבלת מידע נוסף.] System. Web. ממשק משתמש. החריג. שגיאת _ שגיאה (מצב חריג פנימי, שגיאת מחרוזת, הודעת Errormessage, שגיאה בוליאנית) + 190 המערכת. מערכת החריגים של... ממשק המשתמש. שגיאה בשיטת האימות (מצב חריג פנימי, מחרוזת מחרוזות) + 46 System. Web. מעצב הפרמטרים של המערכת. עריכה בסידרה (מחרוזת קלט מחרוזת, מטרת מטרה) + 861 System. Web. המעצב של המערכת. ממשק המשתמש... Web. UI. IStateFormatter2. בעריכה בסידרה (מצב של מחרוזת סדרתית, מטרת המטרה) + 51 System. Web. UI. Util. (מעצב IStateFormatter2, המדינה הסדרתית מחרוזת, מטרה מטרה) + 67 System. Web. UI. הידניפילתאחאץאחות. טען () + 444 System. Web. ממשק משתמש. עמוד. החלפה (בינוני) + 368 System. Web. UI. Page. LoadAllState () + 109 System. Web. UI. עמוד. מעבד בעלי מערכת (Inclucesb בוליאני, כולל בוליאני) + 7959 System. Web. ממשק משתמש. Page. מעבד בקשה (הכללה בוליאנית, כולל בוליאני) + 429 System. Web. UI. Page. מעבד בקשה () + 125 System. Web. UI. עמוד. מעבד בקשת הקשר (HttpContext הקשר) + 48 System. Web. UI. Page. מעבד בקשה (HttpContext הקשר) + 234 ASP. mypage_aspx. מעבד בקשה (HttpContext הקשר) ב...: 0 System. Web. מערכת. מערכת. אינטרנט. בקשה לביצוע. System. Web. HttpApplication. הפעלה () + 1300 System. Web. HttpApplication. האפליקציה להוצאה להורג (שלב ה& בוליאני) + 140

סיבה 1: יישום האינטרנט פועל בחווה (סביבה מרובת שרתים)

ASP.NET יוצר באופן אוטומטי מפתח הצפנה עבור כל יישום ומאחסן את המפתח בכוורת הרישום HKCU. מפתח זה שנוצר באופן אוטומטי משמש אם לא מדובר ברכיב > < המכונה מפורש בתצורת היישום. עם זאת, מאחר שמפתח שנוצר באופן אוטומטי הוא מקומי למחשב שיצר את המפתח, תרחיש זה גורם לבעיה עבור יישומים הפועלים בחווה. כל שרת בחווה יפיק מפתח מקומי משלו, ואיש מהשרתים בחווה לא יסכים באיזה מפתח להשתמש. התוצאה היא שאם שרת אחד מייצר תוכן מנה _ VIEWSTATE ששרת אחר צורכת, הצרכן יחוו כשל באימות MAC.

  • החלטה 1a: יצירת רכיב מ> מ< מרכזי של מפתח המכונה על-ידי הוספת רכיב מ< > מפורש לקובץ Web. config של היישום, המפתח מורה ל-ASP.NET לא להשתמש במפתח ההצפנה שנוצר באופן אוטומטי. עיין בנספח א' לקבלת הוראות ליצירת רכיב > מ< המכונה. לאחר שרכיב זה נוסף לקובץ Web. config, פרוס משני היישומים את היישום לכל שרת בחווה. שים לב שירותי אירוח מסוימים באינטרנט, כגון אתרי אינטרנט של Microsoft, לנקוט בצעדים כדי לסנכרן את המפתח המופק אוטומטית של כל יישום על-פני השרתים החזיתיים שלהם. פעולה זו מאפשרת ליישומים שלא ציינו רכיב > מפורש של < המכונה ' מפתח ' כדי להמשיך לעבוד בסביבות אלה, גם אם היישום פועל בחווה. אם היישום שלך פועל על שירות אירוח של ספק חיצוני, נא פנה אל ספק האירוח שלך כדי לקבוע אם מצב זה חל עליך.

  • רזולוציה 1b: אפשר אהדה באיזון העומס אם האתרים שלך פועלים מאחורי מאזן עומס, באפשרותך להפוך את הזיקה של השרת לזמינה באופן זמני לעקוף את הבעיה. הדבר מסייע להבטיח שכל לקוח נתון יבצע אינטראקציה רק עם שרת פיזי אחד מאחורי מאזן העומס כך שכל מטענים ההצפנה ייווצרו על-ידי אותו שרת וייצרך. זה לא צריך להיחשב פתרון לטווח ארוך לבעיה. גם כאשר הזיקה לשרת מופעלת, רוב הטעינה אזנים תנתב את הלקוח לשרת פיזי שונה אם השרת המקורי שאליו אזנים הטעינה מחובר למצב לא מקוון. פעולה זו גורמת לשרת החדש לדחות מטענים קריפטוגרפיים (כגון _ VIEWSTATE, כרטיסים לאימות טפסים, אסימוני אנטי-זיופים ושירותים אחרים) שהלקוח כרגע כולל. על-ידי שימוש ברכיב > < מפורש ובפריסה מחדש של היישום, יש להעדיף את האפשרות של זיקה לשרת.

סיבה 2: תהליך העובד משתמש בזהות מאגר היישומים של IIS 7.0

שירותי מידע באינטרנט (IIS) 7.0 (חלונות ויסטה, Windows Server 2008) הציגו זהות מאגר יישומים, מנגנון בידוד חדש המסייע לספק אבטחה מוגברת עבור שרתים הפועלים ביישומי ASP.NET. עם זאת, לאתרים הפועלים תחת זהות מאגר היישומים אין גישה לרישום HKCU. זהו המקום שבו זמן הריצה ASP.NET מאחסן את המפתחות המופקים < מ> המכונה שלה. התוצאה היא ש-ASP.NET לא יכול לשמור את המפתח שנוצר באופן אוטומטי כאשר מאגר היישומים מאופס. לכן, בכל פעם שw3wp. exe מאופס, נוצרת מפתח זמני חדש. שים לב זו אינה בעיה ב-IIS 7.5 (Windows 7, Windows Server 2008 R2) ובגירסאות מאוחרות יותר. בגירסאות אלה של IIS, ASP.NET יכול לשמור על מפתחות שנוצרו באופן אוטומטי במיקום אחר שישרוד את האיפוס של מאגר היישומים.

  • ברזולוציה 2a: השתמש בכלי השירות aspnet_regiis התקנות ASP.NET מכילות כלי שירות, aspnet_regiis. exe. כלי שירות זה מאפשר ASP.NET interface עם IIS כדי לבצע את התצורות הדרושות להפעלת יישום מנוהל. אחת מתצורות אלה יוצרת את המפתחות הנחוצים בכוורת הרישום כדי לאפשר התמדה של מפתחות מחשב שנוצרו באופן אוטומטי. ראשית, עליך לקבוע באיזו מאגר יישומים משתמש האתר שלך. ניתן לקבוע זאת באמצעות כלי השירות inetmgr הכלול ב-IIS. בחר את האתר שלך בתצוגת העץ שמשמאל, לחץ לחיצה ימנית על ניהול Website ולאחר מכן לחץ על הגדרות מתקדמות. תיבת הדו שמופיעה תציג את שם מאגר היישומים. הגדרות מתקדמות כדי לפיגום את מפתחות הרישום המתאימים עבור מאגר יישומים של ASP.NET 4.0, בצע את הפעולות הבאות:

    1. פתח שורת פקודה ניהולית.

    2. אתר את הספריה המתאימה, בהתאם לשאלה אם מאגר היישומים שלך הוא 32 סיביות או 64 סיביות:

      • 32-סיבית של מאגר יישומים: cd/d%windir%\Microsoft.NET\Framework\v4.0.30319

      • 64-bit מאגר יישומים: cd/D%windir%\Microsoft.NET\Framework64\v4.0.30319

    3. עבור אל הספריה, הקלד את הפקודה הבאה ולאחר מכן הקש Enter:

      aspnet_regiis-ga "שירותי השמה"

    אם מאגר היישומים הוא מאגר יישומים ASP.NET 2.0 או 3.5, בצע את הפעולות הבאות:

    1. פתח שורת פקודה ניהולית.

    2. אתר את הספריה המתאימה, בהתאם לשאלה אם מאגר היישומים שלך הוא 32 סיביות או 64 סיביות:

      • 32-bit מאגר יישומים: cd/D%windir%\Microsoft.NET\Framework\v2.0.50727

      • 64-bit מאגר יישומים: cd/D%windir%\Microsoft.NET\Framework64\v2.0.50727

    3. עבור אל הספריה, הקלד את הפקודה הבאה ולאחר מכן הקש Enter:

      aspnet_regiis-ga "שירותי השמה"

    לדוגמה, אם מאגר היישומים שלך נקרא ' מאגר האפליקציות שלי ' (כמו בתמונה הקודמת), הפעל את הפקודה הבאה:

    aspnet_regiis-ga "IIS מאגר/בריכת האפליקציה שלי" שים לב ייתכן ששירותי המערכת APPHOSTSVC והיה צריכים לפעול עבור כלי השירות aspnet_regiis כדי לפתור את שמות APPPOOL של IIS/* בהתאם.

  • רזולוציה 2 ב': יצירת רכיב > מ< מרכזי של מפתח המכונה על-ידי הוספת רכיב מ< > מפורש לקובץ Web. config של היישום, המפתח מורה ל-ASP.NET לא להשתמש במפתח ההצפנה שנוצר באופן אוטומטי. עיין בנספח א' לקבלת הוראות ליצירת רכיב > מ< המכונה.

סיבה 3: מאגר היישומים מוגדר באמצעות LoadUserProfile = false

אם מאגר היישומים פועל עם זהות מותאמת אישית, ייתכן ש-IIS לא טען את פרופיל המשתמש עבור הזהות. הדבר מכיל את תופעת הוואי של הפיכת הרישום HKCU לבלתי זמין עבור ASP.NET כדי להתמיד באופן אוטומטי < מ> המכונה. לכן, מפתח חדש שנוצר באופן אוטומטי ייווצר בכל פעם שהיישום יופעל מחדש. לקבלת מידע נוסף, עיין בסעיף ' פרופיל משתמש ' באתר האינטרנט של Microsoft.

  • רזולוציה 3a: שימוש בכלי השירות aspnet_regiis ההנחיות לכך הן זהות לרזולוציה של 2a. לקבלת מידע נוסף, עיין בסעיף זה.

  • רזולוציה 3b: השתמש במפתח < > מפורש על-ידי הוספת רכיב מ< > מפורש לקובץ Web. config של היישום, המפתח מורה ל-ASP.NET לא להשתמש במפתח ההצפנה שנוצר באופן אוטומטי. עיין בנספח א' לקבלת הוראות ליצירת רכיב > מ< המכונה.

  • רזולוציית 3c: הקצאת מפתחות הרישום הנדרשים HKCU באופן ידני אם אין באפשרותך להפעיל את כלי השירות aspnet_regiis, באפשרותך להשתמש ב-script של Windows PowerShell כדי להקצות את מפתחות הרישום המתאימים ב-HKCU. לקבלת מידע נוסף, ראה נספח ב' .

  • רזולוציה תלת-ממדית: הגדרת LoadUserProfile = true עבור מאגר יישומים זה באפשרותך גם לאפשר טעינת פרופיל המשתמש בתוך מאגר יישומים זה. פעולה זו הופכת את כוורת הרישום HKCU, התיקייה הזמנית ומיקומי אחסון ספציפיים למשתמש אחרים הזמינים ליישום. עם זאת, הדבר עלול לגרום לשימוש בדיסק או בזיכרון מוגבר עבור תהליך העובד. לקבלת מידע נוסף אודות אופן ההפעלה של הגדרה זו, עיין ברכיב .

סיבה 4: למאפיין מפתח דף תצוגה יש ערך שגוי

מפתחי תוכנה יכולים להחליט להשתמש במאפיין Page. Viewמפתח כדי להוסיף הגנה מפני זיופים של בקשה לאתר לשדה _ מדינה שבין אם. אם אתה משתמש במאפיין דף. אשנב , הוא מוגדר בדרך כלל לערך, כגון שם המשתמש של משתמש נוכחי או מזהה ההפעלה של המשתמש. תבניות הפרוייקט עבור יישומי WebForms ב-Microsoft Visual Studio 2012 וגירסאות מאוחרות יותר מכילות דוגמאות המשתמשות במאפיין זה. לקבלת מידע נוסף, עיין בנושא המאפיינים של מפתח האתר. אם צוין המאפיין מפתח למשתמש , ערכו נצרב ב-_ viewstate בזמן יצירה. כששדה ה-VIEWSTATE נצרך, השרת בודק את המאפיין מקש המשתמש של הדף הנוכחי ומאמת אותו מול הערך ששימש להפקת השדה _ viewstate. אם הערכים אינם תואמים, הבקשה נדחית כזדונית באופן פוטנציאלי. דוגמה לתצוגה של כישלון הקשור למפתח המשתמש תהיה לקוח עם שתי כרטיסיות פתוחות בדפדפן. הלקוח מחובר כמשתמש א', ובכרטיסיה הראשונה, דף מעובד עם מאפיין VIEWSTATE שהמאפיין מפתח התצוגה שלו מכיל את המילה "User A". בכרטיסיה השניה, הלקוח מתנתק ולאחר מכן מתחבר שוב כמשתמש B. הלקוח חוזר ללשונית הראשונה ושולח את הטופס. המאפיין Userמפתח למשתמש עשוי להכיל את המילה "User B" (מכיוון שזהו הדבר שאומר עוגיית האימות של הלקוח). עם זאת, שדה ה-VIEWSTATE שהלקוח הגיש מכיל "User A". חוסר התאמה זה גורם לכשל.

  • רזולוציה 4a: ודא כי התצוגה מוגדרת כהלכה אם היישום שלך משתמש במאפיין מפתח של אשנב , ודא שהערך של המאפיין זהה לשניהם כאשר מצב התצוגה נוצר וכאשר הוא נצרך. אם אתה משתמש במשתמש הנוכחי של המשתמש המחובר למערכת, ודא שהמשתמש עדיין מחובר ושזהותו של המשתמש לא השתנתה בזמן postback. אם אתה משתמש במזהה ההפעלה של המשתמש הנוכחי, ודא שאין זמן קצוב להפעלה. אם אתה פועל בסביבת חווה, ודא שהרכיבים < מ> המכונה מתאימים. עיין בנספח א' לקבלת הוראות ליצירת רכיבים אלה.

נספח א': כיצד ליצור רכיב > מ< המכונה

אזהרת אבטחה קיימים אתרי אינטרנט רבים שייצרו רכיב מ> מ< מרכזי עבורך בלחיצה על לחצן. לעולם אל תשתמש ברכיב > < המכונה שקיבלת מאחד מהאתרים הבאים. אי אפשר לדעת אם מפתחות אלה נוצרו בצורה מאובטחת או אם הם נרשמים למסד נתונים סודי. עליך להשתמש רק ברכיבי התצורה של < מ> המכונה שיצרת בעצמך.

כדי ליצור רכיב מ> < המכונה בעצמך, באפשרותך להשתמש בקובץ ה-script הבא של Windows PowerShell :

# Generates a <machineKey> element that can be copied + pasted into a Web.config file.
function Generate-MachineKey {
  [CmdletBinding()]
  param (
    [ValidateSet("AES", "DES", "3DES")]
    [string]$decryptionAlgorithm = 'AES',
    [ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")]
    [string]$validationAlgorithm = 'HMACSHA256'
  )
  process {
    function BinaryToHex {
        [CmdLetBinding()]
        param($bytes)
        process {
            $builder = new-object System.Text.StringBuilder
            foreach ($b in $bytes) {
              $builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b)
            }
            $builder
        }
    }
    switch ($decryptionAlgorithm) {
      "AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider }
      "DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider }
      "3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider }
    }
    $decryptionObject.GenerateKey()
    $decryptionKey = BinaryToHex($decryptionObject.Key)
    $decryptionObject.Dispose()
    switch ($validationAlgorithm) {
      "MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 }
      "SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 }
      "HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 }
      "HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 }
      "HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 }
    }
    $validationKey = BinaryToHex($validationObject.Key)
    $validationObject.Dispose()
    [string]::Format([System.Globalization.CultureInfo]::InvariantCulture,
      "<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />",
      $decryptionAlgorithm.ToUpperInvariant(), $decryptionKey,
      $validationAlgorithm.ToUpperInvariant(), $validationKey)
  }
}

עבור יישומים ASP.NET 4.0, אתה יכול פשוט לקרוא ליצור-מלקי ללא פרמטרים כדי ליצור רכיב > מ< המכונה כדלקמן:

PS> Generate-MachineKey
<machineKey decryption="AES" decryptionKey="..." validation="HMACSHA256" validationKey="..." />

ASP.NET 2.0 ו 3.5 יישומים אינם תומכים HMACSHA256. במקום זאת, באפשרותך לציין SHA1 כדי ליצור רכיב מ> מ< מזהה תואם באופן הבא:

PS> Generate-MachineKey -validation sha1
<machineKey decryption="AES" decryptionKey="..." validation="SHA1" validationKey="..." />

ברגע שיהיה ברשותך רכיב מ> < המכונה, באפשרותך להציב אותו בקובץ Web. config. הרכיב < מ> המכונה חוקי רק בקובץ Web. config בבסיס היישום ואינו חוקי ברמת תיקיית המשנה.

<configuration>
  <system.web>
    <machineKey ... />
  </system.web>
</configuration>

לקבלת רשימה מלאה של האלגוריתמים הנתמכים, הפעל עזרה ליצירת-מפתח מתוך הפקודה Windows PowerShell.

נספח ב': הקצאת הרישום להמשך מפתחות שנוצרו באופן אוטומטי

כברירת מחדל, מכיוון שמפתחות של ASP המופקים באופן אוטומטי מתמידות ברישום HKCU, ייתכן שמקשים אלה יאבדו אם פרופיל המשתמש לא נטען לתוך תהליך העובד של IIS ולאחר מכן מחזרת מאגר היישומים. תרחיש זה עלול להשפיע על ספקי אירוח משותפים המפעילים מאגרי יישומים כחשבונות משתמשים רגילים של Windows. כדי לעקוף מצב זה, ASP.NET מאפשר לטפל במקשים שנוצרו באופן אוטומטי ברישום HKLM במקום ברישום HKCU. הדבר מבוצע בדרך כלל באמצעות כלי השירות aspnet_regiis (ראה הוראות בסעיף "פתרון 2a: השתמש בכלי השירות aspnet_regiis"). עם זאת, עבור מנהלי מערכת שאינם מעוניינים להפעיל כלי שירות זה, ניתן להשתמש בקובץ ה-script הבא של Windows PowerShell במקום זאת:

# Provisions the HKLM registry so that the specified user account can persist auto-generated machine keys.
function Provision-AutoGenKeys {
  [CmdletBinding()]
  param (
    [ValidateSet("2.0", "4.0")]
    [Parameter(Mandatory = $True)]
    [string] $frameworkVersion,
    [ValidateSet("32", "64")]
    [Parameter(Mandatory = $True)]
    [string] $architecture,
    [Parameter(Mandatory = $True)]
    [string] $upn
  )
  process {
    # We require administrative permissions to continue.
    if (-Not (new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) {
        Write-Error "This cmdlet requires Administrator permissions."
        return
    }
    # Open HKLM with an appropriate view into the registry
    if ($architecture -eq "32") {
        $regView = [Microsoft.Win32.RegistryView]::Registry32;
    } else {
        $regView = [Microsoft.Win32.RegistryView]::Registry64;
    }
    $baseRegKey = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $regView)
    # Open ASP.NET base key
    if ($frameworkVersion -eq "2.0") {
        $expandedVersion = "2.0.50727.0"
    } else {
        $expandedVersion = "4.0.30319.0"
    }
    $aspNetBaseKey = $baseRegKey.OpenSubKey("SOFTWARE\Microsoft\ASP.NET\$expandedVersion", $True)
    # Create AutoGenKeys subkey if it doesn't already exist
    $autoGenBaseKey = $aspNetBaseKey.OpenSubKey("AutoGenKeys", $True)
    if ($autoGenBaseKey -eq $null) {
        $autoGenBaseKey = $aspNetBaseKey.CreateSubKey("AutoGenKeys")
    }
    # Get the SID for the user in question, which will allow us to get his AutoGenKeys subkey
    $sid = (New-Object System.Security.Principal.WindowsIdentity($upn)).User.Value
    # SYSTEM, ADMINISTRATORS, and the target SID get full access
    $regSec = New-Object System.Security.AccessControl.RegistrySecurity
    $regSec.SetSecurityDescriptorSddlForm("D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GA;;;$sid)")
    $userAutoGenKey = $autoGenBaseKey.OpenSubKey($sid, $True)
    if ($userAutoGenKey -eq $null) {
        # Subkey didn't exist; create and ACL appropriately
        $userAutoGenKey = $autoGenBaseKey.CreateSubKey($sid, [Microsoft.Win32.RegistryKeyPermissionCheck]::Default, $regSec)
    } else {
        # Subkey existed; make sure ACLs are correct
        $userAutoGenKey.SetAccessControl($regSec)
    }
  }
}

הדוגמה הבאה מראה כיצד להקצות את ערכי הרישום המתאימים של HKLM עבור מאגר יישומים הפועל כמשתמש, example@contoso.com (זהו ה-UPN של חשבון המשתמש של Windows). מאגר יישומים זה הוא מאגר יישומים של 32 סיביות המפעיל את ה-CLR v 2.0 (ASP.NET 2.0 או 3.5).

PS> Provision-AutoGenKeys -FrameworkVersion 2.0 -Architecture 32 -UPN "example@contoso.com"

אם במקום זאת מאגר היישומים הוא מאגר יישומים של 64 סיביות המפעיל את CLR v 4.0 (ASP.NET 4.0 או 4.5), הפקודה היא כדלקמן:

PS> Provision-AutoGenKeys -FrameworkVersion 4.0 -Architecture 64 -UPN "example@contoso.com"

למרות שהמפתחות שנוצרו באופן אוטומטי מאוחסנים ב-HKLM מפתח המשנה של הרישום המכיל את חומר ההצפנה הסודי של כל חשבון משתמש מתווסף לרשימת בקרת גישה (ACL) כך שאין אפשרות לקרוא את חומר ההצפנה על-ידי חשבונות משתמשים אחרים.

נספח ג: הצפנת הרכיב < מ> המכונה בקבצי תצורה

ייתכן שמנהלי שרת אינם מעוניינים במידע רגיש ביותר, כגון חומר המפתח < מ> המכונה לצורת טקסט רגיל בקבצי תצורה. אם זהו המצב, מנהלי מערכת עשויים להחליט לנצל את התכונה של .NET Framework המוכרת בשם "תצורה מוגנת". תכונה זו מאפשרת לך להצפין חלקים מסוימים של קבצי. config. אם התוכן של קבצי תצורה אלה נחשף אי פעם, תוכן מקטעים אלה עדיין יישאר סודי. באפשרותך למצוא סקירה קצרה של התצורה המוגנת באתר האינטרנט של MSDN. הוא מכיל גם ערכת לימוד אודות אופן ההגנה על מחרוזות החיבור < > והרכיבים < מ המכונה > של הקובץ Web. config.

זקוק לעזרה נוספת?

הרחב את הכישורים שלך
סייר בהדרכה
קבל תכונות חדשות לפני כולם
הצטרף למשתתפי Microsoft insider

האם מידע זה היה שימושי?

תודה על המשוב!

תודה על המשוב! נראה שכדאי לקשר אותך לאחד מנציגי התמיכה של Office.

×