Hva er visningsstatus?
Visningsstatusen er informasjon som er runde aktiveres mellom webskjemaer (aspx) sider i et ASP.NET-program. HTML-koden for __VIEWSTATE-felt ligner på følgende:
< input type = "skjulte" name = "__VIEWSTATE" id = "__VIEWSTATE" value = "..." / > ASP.NET Vis status oversikt på webområdet Microsoft Developer Network (MSDN) for en mye mer detaljert oversikt over ASP.NET-visningsstatus. Fordi __VIEWSTATE-feltet inneholder viktig informasjon som brukes til å rekonstruere siden på tilbakesending, må du kontrollere at en angriper ikke kan endre dette feltet. Hvis en angriper sendte en skadelig __VIEWSTATE-nyttelast, kan angriperen potensielt lure programmet i utfører en handling som det ellers ikke ville har utført. Hvis du vil hindre denne typen forfalskning angrep, er __VIEWSTATE-feltet beskyttet av en melding godkjenningskode (MAC). ASP.NET validerer MAC som sendes sammen med __VIEWSTATE-nyttelast når det oppstår en tilbakesending. Nøkkelen som brukes til å beregne MAC er angitt i programmets element i Web.config-filen. Fordi angriperen ikke kan gjette innholdet i < machineKey >-elementet, kan angriperen ikke gi en gyldig MAC hvis angriperen prøver å manipulere __VIEWSTATE-nyttelast. ASP.NET vil oppdage at en gyldig MAC ikke er tilgjengelig, og ASP.NET avviser ondsinnet forespørsel.
Et eksempel på et element som kan være lagret i __VIEWSTATE-feltet er tekst for en knappekontroll. Hvis en bruker klikker knappen, kunne hendelsesbehandlingen Button_Click trekke ut tekst for knappen fra Vis status-feltet. Se emnetHva forårsaker feil i datavalideringen for MAC?
En feil ved validering av MAC vil ligne på følgende eksempel:
Serverfeil i applikasjon /.
Validering av MAC for visningsstatus mislyktes. Hvis dette programmet ligger på en webserverklynge eller klynge, må du kontrollere at < > machineKey til angir samme validationKey og algoritmen. Bruke kan ikke AutoGenerate i en klynge. Beskrivelse: Det oppstod et ubehandlet unntak under kjøring av gjeldende webforespørsel. Gå gjennom stakksporingen Hvis du vil ha mer informasjon om feilen og hvor den oppstod i koden. Unntaksdetaljer: System.Web.HttpException: validering av MAC for visningsstatus mislyktes. Hvis dette programmet ligger på en webserverklynge eller klynge, må du kontrollere at < > machineKey til angir samme validationKey og algoritmen. Bruke kan ikke AutoGenerate i en klynge. Kildefeil: [Ingen relevante kildelinjer] Kildefilen:... Linje: 0 Stakksporing: [ViewStateException: Ugyldig visningstilstand. Klienten IP::: 1 Port: 40653 Referent: http://localhost:40643/MyPage.aspx Bane: /MyPage.aspx User-Agent: Mozilla 5.0 (kompatibel; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0) Visningsstatus:...] [HttpException (0x80004005): validering av MAC for visningsstatus mislyktes. Hvis dette programmet ligger på en webserverklynge eller klynge, må du kontrollere at < > machineKey til angir samme validationKey og algoritmen. Bruke kan ikke AutoGenerate i en klynge. Se http://go.microsoft.com/fwlink/?LinkID=314055 for mer informasjon.] System.Web.UI.ViewStateException.ThrowError (indre unntak, String persistedState, String errorPageMessage, boolsk macValidationError) +190 System.Web.UI.ViewStateException.ThrowMacValidationError (unntak indre, String persistedState) + 46 System.Web.UI.ObjectStateFormatter.Deserialize (String inputString, formål formål) +861 System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter2.Deserialize (String serializedState, formål formål) +51 System.Web.UI.Util.DeserializeWithAssert (IStateFormatter2 formatter, String serializedState, formål formål) +67 System.Web.UI.HiddenFieldPageStatePersister.Load() +444 System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +368 System.Web.UI.Page.LoadAllState() +109 System.Web.UI.Page.ProcessRequestMain (boolsk includeStagesBeforeAsyncPoint, boolske includeStagesAfterAsyncPoint) +7959 System.Web.UI.Page.ProcessRequest (boolsk includeStagesBeforeAsyncPoint, boolske includeStagesAfterAsyncPoint) +429 System.Web.UI.Page.ProcessRequest() +125 System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +48 System.Web.UI.Page.ProcessRequest(HttpContext context) +234 ASP.mypage_aspx. OneNote.ashx (HttpContext kontekst) i...: 0 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +1300 System.Web.HttpApplication.ExecuteStep (IExecutionStep trinn, boolsk & completedSynchronously) +140Årsak 1: Web-applikasjonen kjører i en farm (multiservermiljø)
ASP.NET automatisk genererer en krypteringsnøkkel for hvert program og lagre nøkkelen i registerstrukturen HKCU. Dette automatisk genererte nøkkelen brukes hvis det er ingen eksplisitt < machineKey >-elementet i Programkonfigurasjonen. Fordi denne autogenerert nøkkelen er lokalt på datamaskinen som opprettet nøkkelen, forårsaker dette scenariet problemer for programmer som kjører i en farm. Hver server i farmen vil generere sin egen lokale nøkkel, og ingen av serverne i farmen blir enige om hvilken tast som skal brukes. Resultatet er at hvis én server genererer en __VIEWSTATE-nyttelast, som bruker en annen server, forbrukeren vil det oppstå en feil under validering av MAC.
-
Løsning 1a: opprette et eksplisitt < machineKey >-elementtillegg A for instruksjoner om hvordan du genererer et < machineKey >-elementet. Når dette elementet er lagt til i filen Web.config, kan du distribuere programmet til hver server i farmen. Obs! Noen vertstjenester for weben, for eksempel Microsoft Azure webområder, ta forholdsregler for å synkronisere automatisk generert nøkkel for hver applikasjon på tvers av deres-bakservere. Dette gjør at programmer som ikke har angitt et eksplisitt < machineKey >-element for å fortsette å arbeide i disse miljøene, selv om programmet kjører i en farm. Hvis programmet kjører på en tredjeparts-vertstjeneste, kan du kontakte din vertsleverandøren for å finne ut om dette gjelder for deg.
Legger til et eksplisitt < machineKey >-element i Web.config-filen for programmet, forteller utvikleren ASP.NET ikke å bruke den kryptografiske nøkkelen automatisk generert. Se -
Oppløsning 1b: Aktiver affinitet i belastningsfordeleren
Hvis områdene opererer bak en belastningsfordeling, kan du aktivere serveren affinitet å omgå problemet midlertidig. Dette sikrer at alle gitt klienten bare samhandler med én fysisk server bak belastningsfordeleren slik at alle kryptografiske payloaden blir både generert av og brukes av den samme serveren. Dette bør ikke anses som en langsiktig løsning på problemet. Selv når serveren affinitet er aktivert, vil de fleste belastningsfordeling omadressere klienten til en annen fysisk server hvis den opprinnelige serveren for belastningsfordeling er affinitized som kobles fra. Dette fører til den nye serveren avviser kryptografiske payloaden som klienten har (for eksempel __VIEWSTATE, billetter til godkjenning av skjemaer, MVCs Anti forfalsket tokener og andre tjenester). Ved hjelp av en eksplisitt < machineKey >-elementet og redistribuering av programmet bør være foretrukket over å aktivere serveren affinitet.
Årsak 2: Arbeidsprosessen bruker identitet for programutvalg for IIS 7.0
Internet Information Services (IIS) 7.0 (Windows Vista, Windows Server 2008) introdusert identitet for programutvalg foren ny isolasjon mekanisme som bidrar til gir øke sikkerheten for servere som kjører ASP.NET-programmer. Områder som kjører under programutvalgsidentiteten har imidlertid ikke tilgang til HKCU-registret. Dette er hvor ASP.NET-kjøretiden lagrer de automatisk genererte < machineKey > nøklene. Resultatet er at ASP.NET ikke kan beholde generert automatisk nøkkelen når applikasjonsutvalget tilbakestilles. Derfor hver gang w3wp.exe tilbakestilles, genereres det en ny midlertidig nøkkel. Obs! Dette er ikke et problem i IIS 7.5 (Windows 7, Windows Server 2008 R2) og senere versjoner. ASP.NET kan opprettholde de automatisk genererte nøklene i et annet sted som forsatt være gyldig selv application pool tilbakestiller på disse versjonene av IIS.
-
Oppløsning 2a: bruke aspnet_regiis-verktøyetaspnet_regiis.exe. Dette verktøyet lar ASP.NET-grensesnitt med IIS til å utføre konfigurasjonene som er nødvendige for å kjøre et administrert program. En av disse konfigurasjonene oppretter de nødvendige nøklene i registerstrukturen for å aktivere holdbarheten for automatisk generert maskinnøkler. Du må først bestemme hvilket applikasjonsutvalg området bruker. Dette kan bestemmes ved hjelp av inetmgr -verktøyet som følger med IIS. Velg området i trevisningen til venstre, høyreklikk Administrere Website, og klikk deretter Avanserte innstillinger. Dialogboksen som vises, vises navnet på applikasjonsutvalget. Hvis du vil scaffold de aktuelle registernøklene for et applikasjonsutvalg ASP.NET 4.0, følger du denne fremgangsmåten:
ASP.NET-installasjoner inneholder et verktøy,-
Åpne en administrativ ledetekst.
-
Finn den aktuelle mappen, avhengig av om din applikasjonsutvalget er 32-biters eller 64-biters:
-
32-biters programutvalg: cd /d %windir%\Microsoft.NET\Framework\v4.0.30319
-
64-biters programutvalg: cd /d %windir%\Microsoft.NET\Framework64\v4.0.30319
-
-
Flytt til mappe, skriver du inn følgende kommando og trykker Enter:
aspnet_regiis - ga "IIS APPPOOL\app-pool-navn"
-
Åpne en administrativ ledetekst.
-
Finn den aktuelle mappen, avhengig av om din applikasjonsutvalget er 32-biters eller 64-biters:
-
32-biters programutvalg: cd /d %windir%\Microsoft.NET\Framework\v2.0.50727
-
64-biters programutvalg: cd /d %windir%\Microsoft.NET\Framework64\v2.0.50727
-
-
Flytt til mappe, skriver du inn følgende kommando og trykker Enter:
aspnet_regiis - ga "IIS APPPOOL\app-pool-navn"
aspnet_regiis - ga "IIS APPPOOL\My App Pool"
Obs! Systemtjenester og APPHOSTSVC WAS må kanskje kjøre aspnet_regiis-verktøyet til å løse IIS APPPOOL\ * navn på riktig måte. -
-
Oppløsning 2b: opprette et eksplisitt < machineKey >-elementtillegg A for instruksjoner om hvordan du genererer et < machineKey >-elementet.
Legger til et eksplisitt < machineKey >-element i Web.config-filen for programmet, forteller utvikleren ASP.NET ikke å bruke den kryptografiske nøkkelen automatisk generert. Se
Årsak 3: Applikasjonsutvalget konfigureres ved hjelp av LoadUserProfile = USANN
Hvis applikasjonsutvalget kjører med en tilpasset identitet, IIS kan ikke har lastet inn brukerprofil for identiteten. Dette har sideeffekt av gjør det utilgjengelig for ASP.NET til å opprettholde den automatisk genererte < machineKey > HKCU-registret. Derfor vil en ny nøkkel generert automatisk bli opprettet hver gang programmet startes på nytt. Se delen Brukerprofilen på Microsofts webområde for mer informasjon.
-
Oppløsning 3a: bruke aspnet_regiis-verktøyetoppløsningen 2a. Se dette for mer informasjon.
Instruksjoner for dette er den samme som -
Oppløsning 3b: bruker en eksplisitt < machineKey >tillegg A for instruksjoner om hvordan du genererer et < machineKey >-elementet.
Legger til et eksplisitt < machineKey >-element i Web.config-filen for programmet, forteller utvikleren ASP.NET ikke å bruke den kryptografiske nøkkelen automatisk generert. Se -
Løsning 3c: klargjøre de nødvendige HKCU-registernøklene manueltTillegg B Hvis du vil ha mer informasjon.
Hvis du ikke kan kjøre aspnet_regiis-verktøyet, kan du bruke en Windows PowerShell-skriptet til å klargjøre de aktuelle registernøklene i HKCU. Se -
Oppløsning 3d: Set LoadUserProfile = true for dette programutvalgetelementet Hvis du vil ha mer informasjon om hvordan du aktiverer denne innstillingen.
Du kan også aktivere laster inn brukerprofil i dette applikasjonsutvalget. Dette gjør registerstrukturen HKCU, midlertidig mappe og andre lagringssteder, brukerspesifikke tilgjengelig for programmet. Dette kan imidlertid føre til økt bruk av diskplass eller minne for arbeidsprosessen. Se
Årsak 4: Egenskapen Page.ViewStateUserKey har en ugyldig verdi
Programvareutviklere kan velge å bruke egenskapen Page.ViewStateUserKey til å legge til forespørselen om områdedekkende forfalsket beskyttelse i feltet __VIEWSTATE. Hvis du bruker egenskapen Page.ViewStateUserKey , er det vanligvis satt til en verdi, for eksempel gjeldende brukers brukernavn eller brukerens økt-ID. Project-maler for webskjemaer programmer i Microsoft Visual Studio 2012 og senere versjoner inneholder eksempler som bruker denne egenskapen. Se egenskapsemnet Page.ViewStateUserKey på webområdet Microsoft Developer Network (MSDN) for mer informasjon. Hvis egenskapen ViewStateUserKey er angitt, er verdien brent til __VIEWSTATE generasjon samtidig. Når feltet __VIEWSTATE er brukt, serveren kontrollerer ViewStateUserKey -egenskapen for den gjeldende siden, og validerer den mot verdien som ble brukt til å generere __VIEWSTATE-feltet. Hvis verdiene ikke samsvarer, avvist blir forespørselen som potensielt skadelig. Et eksempel på en ViewStateUserKey-relaterte feil kan være en klient som har to faner åpne i webleseren. Klienten er logget på som bruker A, og i den første kategorien, vises en side med en __VIEWSTATE med ViewStateUserKey -egenskapen inneholder "Bruker A." I den andre kategorien klienten logger av og deretter logger på som bruker B. Klienten sender skjemaet, og går tilbake til den første kategorien. Egenskapen ViewStateUserKey kan inneholde "Bruker B" (fordi det er informasjonskapsler for godkjenning av klientens sier). Feltet __VIEWSTATE som klienten sendte inneholder imidlertid "Bruker A." Denne konflikten fører til feil.
-
4a løsning: Kontroller at ViewStateUserKey er riktig angitttillegg A for å få instruksjoner om hvordan du genererer disse elementene.
Hvis programmet bruker egenskapen ViewStateUserKey , må du kontrollere at egenskapsverdien er de samme både når det genereres visningsstatus, og når den er brukt. Hvis du bruker gjeldende påloggede brukers brukernavn, må du kontrollere at brukeren fremdeles er logget på og at brukerens identitet ikke er endret på tidspunktet for tilbakesending. Hvis du bruker gjeldende brukers økt-ID, må du kontrollere at økten ikke tidsavbrutt. Hvis du kjører i et farmmiljø, kontrollerer du at < machineKey > objektene samsvarer. Se
Tillegg A: hvordan du genererer et < machineKey >-element
Sikkerhetsadvarsel
Det finnes mange web-områder som vil generere en < machineKey >-elementet for deg ved å klikke en knapp. Bruk aldri et < machineKey >-element som du fikk fra en av disse områdene. Det er umulig å vite om disse nøklene ble opprettet på en sikker måte, eller hvis de spilles til en hemmelig database. Du bør bare noen gang bruke < machineKey > konfigurasjon elementer som du har opprettet selv.Windows PowerShell -skriptet nedenfor:
Hvis du vil generere en < machineKey >-elementet selv, kan du bruke
# 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)
}
}
Du kan bare kalle Generer MachineKey for ASP.NET 4.0-programmer, uten parametere for å generere en < machineKey >-elementet som følger:
PS> Generate-MachineKey
<machineKey decryption="AES" decryptionKey="..." validation="HMACSHA256" validationKey="..." />
ASP.NET 2.0- og 3.5-programmer støtter ikke HMACSHA256. I stedet kan du angi SHA1 for å generere en kompatibel < machineKey >-elementet som følger:
PS> Generate-MachineKey -validation sha1
<machineKey decryption="AES" decryptionKey="..." validation="SHA1" validationKey="..." />
Så snart du har en < machineKey >-elementet, kan du legge den inn i Web.config-filen. < MachineKey >-elementet er bare gyldige i filen Web.config i roten av programmet, og er ikke gyldig på undermappe nivå.
<configuration>
<system.web>
<machineKey ... />
</system.web>
</configuration>
For en fullstendig liste over støttede algoritmer, kjøre å generere MachineKey fra Windows PowerShell-ledeteksten.
Tillegg B: klargjøring av registret for å beholde automatisk genererte nøkler
Som standard, fordi ASP.NETs automatisk genererte nøkler er beholdt i HKCU-registret kan disse nøklene gå tapt hvis brukerprofilen ikke lastet inn i IIS-arbeidsprosessen og deretter applikasjonsutvalget resirkuleres. Dette scenariet kan påvirke delte vert leverandører som kjører programutvalg som standard Windows-brukerkontoer.Windows PowerShell -skriptet brukes i stedet:
Hvis du vil unngå denne situasjonen, aktiverer ASP.NET persisting tastene automatisk generert i HKLM registret i stedet for HKCU-registret. Dette er vanligvis utføres ved hjelp av aspnet_regiis-verktøyet (se instruksjonene i den "oppløsning 2a: bruke aspnet_regiis-verktøyet" delen). Men for administratorer som ikke ønsker å kjøre dette verktøyet, kan følgende
# 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)
}
}
}
Følgende eksempel viser hvordan du klargjør riktig HKLM registeroppføringene for et applikasjonsutvalg som kjører som bruker example@contoso.com (dette er UPN av Windows-brukerkontoen). Dette applikasjonsutvalget er et 32-biters programutvalg som kjører CLR-v2.0 (ASP.NET 2.0 eller 3,5-tommers).
PS> Provision-AutoGenKeys -FrameworkVersion 2.0 -Architecture 32 -UPN "example@contoso.com"
Hvis applikasjonsutvalget er i stedet et 64-biters programutvalg som kjører CLR v4.0 (ASP.NET 4.0 eller 4.5), er kommandoen som følger:
PS> Provision-AutoGenKeys -FrameworkVersion 4.0 -Architecture 64 -UPN "example@contoso.com"
Selv om de automatisk genererte nøklene lagres i HKLM, legges registerundernøkkelen som inneholder hver brukerkonto hemmelig kryptografiske materiale til en tilgangskontrolliste (ACL) slik at det kryptografiske materialet ikke kan leses av andre brukerkontoer.
Tillegg C: kryptere < machineKey >-elementet i konfigurasjonsfiler
Server-administratorer vil kanskje ikke svært følsom informasjon, for eksempel < machineKey > nøkkelen regning til bein ren tekst-skjemaet i konfigurasjonsfilene. Hvis dette er tilfellet, kan administratorer velge å dra nytte av en .NET Framework-funksjon kalt "beskyttet konfigurasjon." Denne funksjonen lar deg kryptere bestemte deler av .config-filer. Hvis innholdet i disse konfigurasjonsfiler noensinne er publisert, forblir innholdet i disse delene, hemmelig.beskyttet konfigurasjon på MSDN-webområdet. Den inneholder også en veiledning om hvordan du beskytter < connectionStrings > og < machineKey > elementer i Web.config-filen.
Du kan finne en kort oversikt over