Prisijunkite prie „Microsoft“
Prisijunkite arba sukurkite paskyrą.
Sveiki,
Pasirinkti kitą paskyrą.
Turite kelias paskyras
Pasirinkite paskyrą, kurią naudodami norite prisijungti.

Kas yra Rodyti būseną?

Rodinio būsena yra informacija, kuri apvalinti tarp WebForms (. aspx) puslapių ASP.NET programoje. Į HTML žymėjimas, yra laukas _ VIEWSTATE panašų į šį:

< įvesties tipas = "paslėptas" pavadinimas = "_" VIEWSTATE "ID =" _ "VIEWSTATE" reikšmė = "..."/>Vienas pavyzdys elemento, kuris gali būti saugomas _ _ VIEWSTATE lauke yra mygtuko valdiklio tekstas. Jei vartotojas spusteli mygtuką, Button_Click įvykio apdorojimo programa galės išskleisti mygtuko tekstą iš rodinio būsenos lauko. ASP.NET Peržiūrėti būsenos apžvalga temą "Microsoft" programų kūrėjų tinklo (MSDN) svetainėje daug išsamiau apžvalga ASP.net rodinio būseną. Kadangi _ _ VIEWSTATE lauke yra svarbi informacija, kuri naudojama norint atkurti puslapio atgalinį siuntimo, įsitikinkite, kad pažeidėjas negali suklastuoti šio lauko. Jei pažeidėjas pateikė kenkėjiškų _ "VIEWSTATE naudingosios apkrovos, užpuolikas gali potencialiai apgauti taikymo atlikti veiksmą, kad jis kitaip nebūtų atlikti. Norint išvengti tokio tipo klastojimo, "_ f VIEWSTATE" laukas yra apsaugotas pranešimo autentifikavimo kodu (MAC). ASP.NET patvirtina MAC, kuris pateikiamas kartu su _ _ VIEWSTATE naudingosios apkrovos, kai atgaliniai pranešimai. Raktas, naudojamas apskaičiuoti MAC yra nurodyta programos elemente Web. config faile. Dėl to, kad užpuolikas negali atspėti < machineKey > elemento turinį, užpuolikas negali pateikti galiojantį MAC jei pažeidėjas bando suklastoti su _ _ VIEWSTATE apkrova. ASP.NET bus aptikti, kad galiojantis MAC nebuvo pateikta, ir ASP.NET bus atmesti kenkėjiškų prašymą.

Kas sukelia MAC tikrinimo klaidos?

MAC tikrinimo klaida bus panašus į šį pavyzdį:

Serverio klaida "/" taikomoje programoje. Tikrinimo kuriuose Mac nepavyko. Jei ši programa yra Patalpinta interneto ūkio ar klasterio, užtikrinti, kad < machineKey > konfigūracija nurodo tą patį validationKey ir patvirtinimo algoritmas. AutoGenerate negalima naudoti klasteryje. Aprašymas: vykdant dabartinę žiniatinklio užklausą įvyko neapdorota išimtis. Peržiūrėkite rietuvės sekimas, jei reikia daugiau informacijos apie klaidą ir kur ji atsirado kodas. Išimčių informacija: System. Web. HttpException: tikrinimo kuriuose Mac nepavyko. Jei ši programa Patalpinta žiniatinklio ūkio arba klasterio, užtikrinti, kad < machineKey > konfigūracija nurodo tą patį validationKey ir patvirtinimo algoritmas. AutoGenerate negalima naudoti klasteryje. Šaltinio klaida: [nėra svarbių šaltinio eilučių] Šaltinio failas:... Linija: 0 Rietuvės sekimas: [ViewStateException: neleistina ViewState. Kliento IP::: 1 Prievadas: 40653 Referer: http://localhost:40643/MyPage.aspx Kelias:/MyPage.aspx Vartotojo agentas: Mozilla/5.0 (suderinama; MSIE 10,0; Windows NT 6,2; WOW64 Trident/6.0) ViewState:...] [HttpException (0x80004005): peržiūros būsenos MAC tikrinimas nepavyko. Jei ši programa Patalpinta žiniatinklio ūkio arba klasterio, užtikrinti, kad < machineKey > konfigūracija nurodo tą patį validationKey ir patvirtinimo algoritmas. AutoGenerate negalima naudoti klasteryje. Žr http://go.microsoft.com/fwlink/?LinkID=314055 gauti daugiau informacijos.] System. Web. UI. ViewStateException. ThrowError (išimtis vidinė, eilutės persistedState, eilutės errorPageMessage, Boolean macValidationError) + 190 System. Web. UI. ViewStateException. ThrowMacValidationError (išimtis vidinė, eilutės persistedState) + 46 System. Web. UI. ObjectStateFormatter. Deserialize (eilutė inputString, paskirties tikslas) + 861 System. Web. UI. ObjectStateFormatter. System. Web. UI. IStateFormatter2. Deserialize (eilutė serializedState, paskirties tikslas) + 51 System. Web. UI. util. Deserializewithteigti (IStateFormatter2 Formatter, eilutės serializedState, paskirties tikslas) + 67 System. Web. UI. Hiddenfieldpagestatepatvarer. load () + 444 System. Web. UI. Page. LoadPageStateFromPersistenceMedium () + 368 System. Web. UI. Page. LoadAllState () + 109 System. Web. UI. Page. ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) + 7959 System. Web. UI. Page. ProcessRequest (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) + 429 System. Web. UI. Page. ProcessRequest () + 125 System. Web. UI. Page. Processrequestwithnoteigti (HttpContext kontekste) + 48 System. Web. UI. Page. ProcessRequest (HttpContext kontekstas) + 234 Į ASP. mypage_aspx. ProcessRequest (HttpContext kontekstas), esantis...: 0 System. Web. CallHandlerExecutionStep. System. Web. HttpApplication. IExecutionStep. Execute () + 1300 System. Web. HttpApplication. ExecuteStep (IExecutionStep žingsnis, Boolean & Completedsinchronously) + 140

1 priežastis: žiniatinklio programa veikia ūkyje (kelių serverių aplinkoje)

ASP.NET automatiškai generuoja kriptografinį raktą kiekvienos programos ir saugo raktą HKCU registro avilį. Šis automatiškai sugeneruotas raktas yra naudojamas, jei nėra aiškaus < machineKey > elementas programos konfigūraciją. Tačiau, nes šis automatiškai sugeneruotas raktas yra vietinis į kompiuterį, kuris sukūrė raktą, šis scenarijus sukelia problema, kad taikomosios programos, kurios veikia ūkyje. Kiekvienas ūkio serveris sukurs savo vietinį raktą ir nė vienas ūkio serverių nesutiks, kurį klavišą naudoti. Rezultatas yra tai, kad, jei vienas serveris generuoja _ _ VIEWSTATE naudingosios apkrovos, kad kitą serverio sunaudoja, vartotojas patirs MAC tikrinimo klaida.

  • Rezoliucija 1a: sukurti aiškų < machineKey > elementas Pridedant aiškų < machineKey > elementą į programos Web. config failą, kūrėjas pasakoja ASP.NET nenaudoti automatiškai sugeneruotas šifravimo raktas. Instrukcijas, kaip sukurti < machineKey > elementas, žr A priedėlyje . Po to, kai šis elementas yra įtraukta į Web. config failą, iš naujo įdiegti programą į kiekvieną ūkio serveryje. Pastaboje Kai kurios žiniatinklio prieglobos tarnybos, pvz., "Microsoft Azure" žiniatinklio svetainės, imasi veiksmų, kad sinchronizuotų kiekvienos taikomosios programos automatiškai sugeneruotą raktą per jų galutinių serverių. Tai leidžia programas, kurios nėra nurodyta aiškiai < machineKey > elementas toliau dirbti šiose aplinkose, net jei programa veikia ūkyje. Jei jūsų programa veikia trečiosios šalies prieglobos paslauga, prašome susisiekti su savo prieglobos paslaugų teikėju, kad sužinotumėte, ar ši situacija jums tinka.

  • 1b rezoliucija: įgalinti afinitetą apkrovos išlyginimo priemonės Jei jūsų svetainės veikia už apkrovos išlyginimo priemonės, galite įgalinti serverio pažiūras laikinai išspręsti šią problemą. Tai padeda užtikrinti, kad bet kuris klientas tik sąveikauja su vienu fiziniu serveriu už apkrovos išlyginimo priemonės taip, kad visi kriptografinius naudingosios apkrovos bus tiek generuoja ir suvartoja to paties serverio. Tai neturėtų būti laikoma ilgalaikiu problemos sprendimu. Net tada, kai serverio afinitetas yra įjungtas, dauguma apkrovos balansavimo bus nukreipti klientą į kitą fizinį serverį, jei originalus serveris, į kurį įkelti balansavimo buvo affinitized atsijungia. Tai sukelia naują serverį, kad atmestumėte kriptografinės apkrovos (pvz., _ "VIEWSTATE", formų autentifikavimo bilietai, MVC apsaugos nuo klastojimo atpažinimo ženklai ir kitos tarnybos), kurį šiuo metu turi klientas. Naudojant aiškų < machineKey > elementas ir iš naujo įdiegti programą turėtų būti pageidaujama per leidžianti serverio pažiūras.

2 priežastis: darbo procesas naudoja IIS 7,0 taikomųjų programų telkinio tapatybė

Informacinės interneto paslaugos (IIS) 7,0 (Windows Vista, Windows Server 2008) pristatė taikomųjų programų telkinio tapatybę, naujas izoliavimo mechanizmas, kuris padeda užtikrinti didesnį saugumą serverių, paleisti ASP.net programas. Tačiau svetainių, kurios veikia pagal taikomųjų programų telkinio tapatybė neturi prieigos prie HKCU registre. Tai kur ASP.NET Runtime saugo savo auto-generated < machineKey > klavišus. Rezultatas yra, kad ASP.NET negali išlikti automatiškai sugeneruotas raktas, kai iš naujo nustatyti taikomųjų programų telkinio. Todėl kiekvieną kartą, kai W3wp. exe iš naujo, sukuriamas naujas laikinas raktas. Pastaboje Tai nėra problema, IIS 7,5 (Windows 7 "," Windows Server 2008 R2) ir naujesnės versijos. Dėl šių versijų IIS, ASP.NET gali išlikti automatiškai generuoja raktus kitoje vietoje, kad išgyvena taikomųjų programų telkinio iš naujo.

  • Rezoliucija 2a: naudokite aspnet_regiis priemonę ASP.NET įrenginiuose yra įrankis, aspnet_regiis. exe. Šis įrankis leidžia ASP.NET sąsaja su IIS atlikti konfigūracijos, kurių reikia norint paleisti valdomos programos. Viena iš šių konfigūracijų sukuria būtinus raktus registro avilyje, kad būtų galima automatiškai sugeneruotų kompiuterio raktų patvarumas. Pirma, jūs turite nustatyti, kuri taikomųjų programų telkinio jūsų svetainė naudoja. Tai gali būti nustatyta naudojant įrankį inetmgr , kuris yra įtrauktas į IIS. Kairėje esančiame medžio rodinyje pasirinkite savo svetainę, dešiniuoju pelės mygtuku spustelėkite tvarkyti website, tada spustelėkite Išplėstiniai parametrai. Pasirodžiusiame dialogo lange bus rodomas taikomųjų programų telkinio pavadinimas. Išplėstiniai parametrai Į pastą atitinkamą registro raktus, ASP.NET 4,0 taikomųjų programų telkinio, atlikite šiuos veiksmus:

    1. Atidarykite administravimo komandinę eilutę.

    2. Suraskite atitinkamą katalogą, priklausomai nuo to, ar jūsų taikomųjų programų telkinys yra 32 bitų arba 64 bitų:

      • 32 bitų taikomųjų programų telkinys: CD/d%windir%\Microsoft.NET\Framework\v4.0.30319

      • 64 bitų taikomųjų programų telkinys: CD/d%windir%\Microsoft.NET\Framework64\v4.0.30319

    3. Perkelti į katalogą, įveskite toliau nurodytą komandą ir paspauskite ENTER:

      aspnet_regiis-ga "IIS APPPOOL\app-pool-name"

    Jei taikomųjų programų telkinio yra ASP.NET 2,0 arba 3,5 taikomųjų programų telkinio, atlikite šiuos veiksmus:

    1. Atidarykite administravimo komandinę eilutę.

    2. Suraskite atitinkamą katalogą, priklausomai nuo to, ar jūsų taikomųjų programų telkinys yra 32 bitų arba 64 bitų:

      • 32 bitų taikomųjų programų telkinys: CD/d%windir%\Microsoft.NET\Framework\v2.0.50727

      • 64 bitų taikomųjų programų telkinys: CD/d%windir%\Microsoft.NET\Framework64\v2.0.50727

    3. Perkelti į katalogą, įveskite toliau nurodytą komandą ir paspauskite ENTER:

      aspnet_regiis-ga "IIS APPPOOL\app-pool-name"

    Pavyzdžiui, jei jūsų taikomųjų programų telkinys pavadintas mano programėlių telkinyje (kaip ir ankstesniame vaizde), vykdykite šią komandą:

    aspnet_regiis-ga "IIS APPPOOL\My App baseinas" Pastaboje Sistemos paslaugų APPHOSTSVC ir buvo gali būti rodomi aspnet_regiis naudingumo išspręsti IIS APPPOOL \ * pavadinimų tinkamai.

  • Rezoliucija 2b: sukurti aiškų < machineKey > elementas Pridedant aiškų < machineKey > elementą į programos Web. config failą, kūrėjas pasakoja ASP.NET nenaudoti automatiškai sugeneruotas šifravimo raktas. Instrukcijas, kaip sukurti < machineKey > elementas, žr A priedėlyje .

3 priežastis: taikomųjų programų telkinys yra sukonfigūruotas naudojant LoadUserProfile = FALSE

Jei taikomųjų programų telkinys veikia su vartotojo tapatybę, IIS gali įkelti vartotojo profilį, tapatybę. Tai turi šalutinį poveikį padaryti HKCU registro neprieinamas ASP.NET išlikti Auto generuoja < machineKey >. Todėl naujas automatiškai sugeneruotas raktas bus sukurtas kaskart paleidus programą. Daugiau informacijos ieškokite skyriuje Vartotojo profilis , esančiame "Microsoft" svetainėje.

  • Rezoliucija 3a: naudokite aspnet_regiis priemonę Nurodymai yra tokie pat kaip rezoliucija 2a. Daugiau informacijos rasite šiame skyriuje.

  • Rezoliucija 3b: naudokite aiškų < machineKey > Pridedant aiškų < machineKey > elementą į programos Web. config failą, kūrėjas pasakoja ASP.NET nenaudoti automatiškai sugeneruotas šifravimo raktas. Instrukcijas, kaip sukurti < machineKey > elementas, žr A priedėlyje .

  • Rezoliucija 3C: reikia rankiniu būdu teikti reikiamus HKCU registro raktus Jei negalite paleisti aspnet_regiis įrankis, galite naudoti "Windows PowerShell" scenarijų teikti atitinkamą registro raktus, HKCU. Daugiau informacijos pateikiama B priedėlyje .

  • Rezoliucija 3D: Set LoadUserProfile = True šiam taikomųjų programų telkinį Taip pat galite įgalinti įkeliant vartotojo profilį šio taikomųjų programų telkinio viduje. Tai daro HKCU registro avilį, laikiną aplanką ir kitų vartotojo konkrečios saugyklos vietos, programos. Tačiau tai gali sukelti padidėjęs disko arba atminties darbo proceso. Daugiau informacijos apie tai, kaip įgalinti šį parametrą, ieškokite elemente .

4 priežastis: ypatybę Page. ViewStateUserKey yra neteisinga reikšmė

Programinės įrangos kūrėjai gali nuspręsti naudoti puslapį. ViewStateUserKey ypatybė, norint pridėti kelių tinklavietę užklausiant apsaugą, esančią lauke _ (ViewState). Jei naudojatės puslapiu. ViewStateUserKey ypatybė, ji paprastai nustatoma į reikšmę, pvz., esamo vartotojo vartotojo vardą arba vartotojo seanso identifikatorių. Projekto šablonai, skirti WebForms programos Microsoft Visual Studio 2012 ir vėlesnės versijos yra pavyzdžiai, kurie naudoja šią ypatybę. Daugiau informacijos rasite peržiūrėję puslapį. ViewStateUserKey ypatybių tema "Microsoft" programų kūrėjų tinklo (MSDN) svetainėje. Jei nurodyta ypatybė Viewstateuserkey , jos reikšmė SUDEGINAMA į _ "ViewState" generavimo metu. Kai yra suvartojama _ _ VIEWSTATE srityje, serveris patikrina dabartinio puslapio Viewstateuserkey ypatybę ir patikrina jį nuo vertės, kuri buvo naudojama generuoti _ _ ViewState srityje. Jei reikšmės nesutampa, užklausa atmetama kaip potencialiai kenksminga. ViewStateUserKey susijusių gedimo pavyzdys būtų klientas, kuris turi du skirtukus atidaryti naršyklėje. Klientas yra prisijungęs kaip vartotojas A, ir pirmajame skirtuke, puslapis yra generuojamas su a _ VIEWSTATE kurių Viewstateuserkey ypatybė yra "vartotojas a." Antrajame skirtuke, klientas įeina ir vėl įeina į vartotojo B. Klientas grįžta į pirmąjį skirtuką ir pateikia formą. Ypatybė Viewstateuserkey gali būti "vartotojas B" (nes tai yra tai, ką sako kliento autentifikavimo slapukas). Tačiau, _ "VIEWSTATE" lauke, kad klientas pateikė yra "vartotojo A". Šis neatitikimas sukelia triktį.

  • Rezoliucija 4a: patikrinkite, ar teisingai nustatyta ViewStateUserKey Jei jūsų programa naudoja ypatybę Viewstateuserkey , patikrinkite, ar ypatybės reikšmė yra tas pats, kai vaizdas būsena yra generuojamas ir kai jis vartojamas. Jei naudojate dabartinį prisijungusius vartotojo vardą, įsitikinkite, kad vartotojas vis dar prisijungęs ir kad vartotojo tapatybė nepasikeitė ne iš atgalinėje laikas. Jei naudojate dabartinio vartotojo seanso identifikatorius, įsitikinkite, kad seanso laikas baigėsi. Jei dirbate ūkio aplinkoje, įsitikinkite, kad < machineKey > elementai sutampa. Instrukcijų, kaip generuoti šiuos elementus, ieškokite A priedėlyje .

A priedėlis: kaip sukurti < machineKey > elementas

Saugos įspėjimas Yra daug interneto svetainių, kurios sukurs < machineKey > elementas jums su mygtuko paspaudimu. Niekada nenaudokite < machineKey > elementą, kurį įsigijote iš vienos iš šių svetainių. Neįmanoma žinoti, ar šie raktai buvo sukurti saugiai, ar įrašomi į slaptą duomenų bazę. Jūs turite tik kada nors naudoti < machineKey > konfigūracijos elementai, kuriuos sukūrėte patys.

Norėdami sukurti < machineKey > elementą sau, galite naudoti šį "Windows PowerShell" scenarijų:

# 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)
  }
}

Dėl ASP.NET 4,0 paraiškas, galite tiesiog skambinti Generuoti-machinekey be parametrų generuoti < machinekey > elementas taip:

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

ASP.NET 2,0 ir 3,5 programos nepalaiko HMACSHA256. Vietoj to, galite nurodyti SHA1 sukurti suderinamą < machineKey > elementas taip:

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

Kaip tik jūs turite < machineKey > elementas, galite įdėti jį į Web. config failą. < MachineKey > elementas yra tik Web. config failą į šakninį jūsų programos ir negalioja poaplankio lygiu.

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

Išsamų palaikomų algoritmų sąrašą, paleiskite žinyno generuoti MachineKey iš "Windows PowerShell" eilutę.

B priedas: registro parengimas, kad būtų išsaugomi automatiškai sugeneruoti raktai

Pagal numatytuosius nustatymus, nes ASP. NETs automatiškai generuoja raktai yra išlikę HKCU registre, šie raktai gali būti prarasti, jei vartotojo profilis nebuvo įkeltas į IIS darbo procesas ir tada taikomųjų programų telkinio perdirba. Šis scenarijus gali turėti įtakos Shared Hosting teikėjai, kuriuose veikia taikomųjų programų telkiniai kaip standartinius Windows vartotojų abonementus. Norėdami išspręsti šią situaciją, ASP.NET leidžia nuolat automatiškai generuoja raktus HKLM registre vietoj HKCU registrą. Paprastai tai atliekama naudojant aspnet_regiis priemonę (žr. instrukcijas skyriuje "rezoliucija 2a: naudokite aspnet_regiis priemonę"). Tačiau administratoriams, kurie nenori paleisti šį įrankį, gali būti naudojamas šis "Windows PowerShell" scenarijų:

# 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)
    }
  }
}

Toliau pateikiamas pavyzdys rodo, kaip konfigūruoti atitinkamą HKLM registro įrašus taikomųjų programų telkinio, kuris veikia kaip vartotojas, example@contoso.com (tai yra Windows vartotojo abonemento UPN). Šis taikomųjų programų telkinys yra 32 bitų taikomųjų programų telkinys, kuriame veikia CLR v 2.0 (ASP.NET 2,0 arba 3,5).

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

Jei taikomųjų programų telkinio vietoj yra 64 bitų taikomųjų programų telkinio, kuriame veikia CLR v 4.0 (ASP.NET 4,0 arba 4,5), komanda yra tokia:

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

Nors automatiškai sugeneruoti raktai yra saugomi HKLM, dalinis registro raktas, kuriame laikomos kiekvieno vartotojo abonemento slapta kriptografinė medžiaga, įtraukiamas į prieigos valdymo sąrašą (ACL), kad kriptografinė medžiaga negalėtų nuskaityti kitų vartotojų abonementų.

C priedėlis: šifravimo < machineKey > elementas konfigūracijos failus

Serverio administratoriai gali nenorėti labai jautri informacija, pvz., < machinekey > pagrindinės medžiagos Bein paprastojo forma konfigūracijos failuose. Tokiu atveju administratoriai gali nuspręsti pasinaudoti ".NET Framework" funkcija, žinoma kaip "apsaugota konfigūracija". Ši funkcija leidžia užšifruoti tam tikrus. config failų skyrius. Jei šių konfigūracijos failų turinys yra kada nors atskleista, šių skirsnių turinys vis dar liks paslaptyje. "MSDN" svetainėje galite rasti trumpą apsaugotos konfigūracijos apžvalgą. Jame taip pat yra pamoka apie tai, kaip apsaugoti < connectionStrings > ir < machineKey > elementų Web. config faile.

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?
Paspaudus mygtuką Pateikti, jūsų atsiliepimai bus naudojami tobulinant „Microsoft“ produktus ir paslaugas. Jūsų IT administratorius galės rinkti šiuos duomenis. Privatumo patvirtinimas.

Dėkojame už jūsų atsiliepimą!

×