Back to "Lisää matkaani ASP.NETin upeaan maailmaan 1.x ViewState"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

ASP.NET Imported mostlylucidcouk Security

Lisää matkaani ASP.NETin upeaan maailmaan 1.x ViewState

Sunday, 29 February 2004

Kirjoitin lehteen. edellinen virka että aioin poseerata Näkymätila, laajentaa asioita olen tehnyt pakkaus salaukseen ja allekirjoittaminen jne. , No on hyviä ja huonoja uutisia tälle suunnitelmalle. Näyttää siltä, että (todella) MAC- ja salaus juttuja käsitellään oikeasti LosWriter-luokassa; sisäinen luokka käyttää LosFormatter Object serialization -ohjelman tekemiseen käytetään seuraavaa koodia (kiitos vielä kerran käyttökelvottomalle Heijastin) :

internal void CompleteTransforms(TextWriter output, bool enableMac, byte[] macKey)
{ int num1;
byte[] array1;
string text1;
char[] array2;
string text2;
num1 = 0;
if (this._recyclable)
{
 this._byteBuffer = ((byte[]) LosWriter._byteBufferAllocator.GetBuffer());
if (this._freePos > 0)
{
 num1 = Encoding.UTF8.GetBytes(this._charBuffer, 0, this._freePos, this._byteBuffer, 0);
 
}
if (enableMac)
{
 array1 = MachineKey.GetEncodedData(this._byteBuffer, macKey, 0, &(num1));
text1 = Convert.ToBase64String(array1, 0, num1);
output.Write(text1);
return; 
}
array2 = ((char[]) LosWriter._charBufferAllocatorBase64.GetBuffer());
num1 = Convert.ToBase64CharArray(this._byteBuffer, 0, num1, array2, 0);
output.Write(array2, 0, num1);
LosWriter._charBufferAllocatorBase64.ReuseBuffer(array2);
return; 
}
this._byteBuffer = Encoding.UTF8.GetBytes(this._charBuffer, 0, this._freePos);
num1 = this._byteBuffer.Length;
if (enableMac)
{
 this._byteBuffer = MachineKey.GetEncodedData(this._byteBuffer, macKey, 0, &(num1));
 
}
text2 = Convert.ToBase64String(this._byteBuffer);
output.Write(text2);
 
}

Kuten todennäköisesti näette, tämä koodi käsittelee MAC-avaimen käyttöä ja salausta sarjatietoihin. Tämä on koodi, jota MachineKey käyttää salauksen suorittamiseen:

internal static byte[] EncryptOrDecryptData(bool fEncrypt, byte[] buf, byte[] modifier, int start, int length)
{ MemoryStream stream1;
ICryptoTransform transform1;
CryptoStream stream2;
byte[] array1;
byte[] array2;
MachineKey.EnsureConfig();
stream1 = new MemoryStream();
transform1 = MachineKey.GetCryptoTransform(fEncrypt);
stream2 = new CryptoStream(stream1, transform1, 1);
stream2.Write(buf, start, length);
if (fEncrypt && (modifier != null))
{
 stream2.Write(modifier, 0, modifier.Length);
 
}
stream2.FlushFinalBlock();
array1 = stream1.ToArray();
stream2.Close();
MachineKey.ReturnCryptoTransform(fEncrypt, transform1);
if (!fEncrypt && (modifier != null))
{
 array2 = new byte[((uint) (array1.Length - modifier.Length))];
Buffer.BlockCopy(array1, 0, array2, 0, array2.Length);
array1 = array2;
 
}
return array1; 
} 

Valitettavasti tämä tarkoittaa, että minun on joko leikiteltävä Refelectorin lähteen pohtimisella / kaadottava Refelectorin lähde kokonaan uudelleen, miten tämä toimii mennäkseni paljon pidemmälle ViewState -keikkailullani, luoja, olisi ollut mukavaa, jos tämä olisi tehty tehtaan kanssa alun perin...epäilyt, että he eivät uskoneet kenenkään olevan niin hullu, että haluaisivat leikkiä sillä...:-)

Lopulta minun täytyy hellittää ja kirjoittaa artikkeli jonakin päivänä. Ongelma minulle on sen jäsentäminen niin, että se on luettavissa ihmisille, jotka eivät ole pakkomielteisiä.

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.