LosFormatter hvis du vil hashe

by Jesper august 25, 2009 14:25

Har du behov for at skjule noget af din data, og ønsker du ikke at udstede nøgler og krypterer med frameworkets stærke krypteringsalgoritmer? Ja så er een af mulighederne at tage Viewstate-mekanismen, også kaldet LosFormatter (Limited Object Serializer Formatter), til hjælpe. Samtidg med at den slører data, sikre den også imod ekstern ændring/fingering af data. Husk blot på at der ikke er tale om kryptering, men encoding. Det er altså muligt for nysgerrige elementer at decode indholdet, og se den rå data. Vil man sikre mod det, er man nød til at bruge kryptering.

LosFormatteren bruges helt som alle andre serialicerings objekter, og de vanskeligste er faktisk bare at finde hvor den befinder sig. Nemlig i System.Web assemblyet, i System.Web.UI namespacet (måske lidt malplaceret?).

StringWriter sw = new StringWriter(); 
LosFormatter losformatter = new LosFormatter(); 
//Serialisering af teksten, med udlæsning i StringWriteren 

losformatter.Serialize( sw, "Hemmelig tekst" ); 

string secret = sw.ToString(); 

//Og tilbage igen... 
string originalstring = losformatter.Deserialize( secret ).ToString(); 

Igen - lige midt i frameworket, klar til brug – hvis man ved hvor den er...

 

Code On…

Tags:

C#

Kommentarer

25-08-2009 15:53:10 #

Jakob Andersen

Hej Jesper,

Jeg har lige et par kommentarer. Som argumentation for at bruge LosFormatter skriver du ting som:

- "skjule data"
- "sikrer imod ekstern ændring/fingerering"

Dit første argument skyder du rimelig hårdt i jorden selv. Andet argument beviser du ikke rigtig. Jeg kan jo fint selv bruge LosFormatter.Serialize på noget tekst og dermed fingere dit data og sende tilbage med den kode du laver i ovenstående.

Den rigtige motivation for at bruge LosFormatter er at du får en kompakt ASCII representation (base64 encoded ), i tilfældet hvor den bruges i WebForms er dette en god metode at sende ViewState i et kompakt format med ud på klienten og tilbage igen via POST. Andre anvendelsesmuligheder kan være overførsel af data mellem forskellige sider og andre steder hvor du har brug for en "dum repræsentation" af en objektgraf og Binary serializering ikke er passende. Sidst men ikke mindst er det værd at notere at LosFormatter er optimeret til de simple typer i frameworket.

Hvis du virkelig ønsker at bruge det til at forhindre tampering skal du selv gemme den serializerede værdi og sammenligne den med det du får tilbage, men for at opnå det er der nu andre metoder der er mere effektive.

Jakob Andersen Denmark

26-08-2009 08:28:20 #

Jesper

@Jakob>
en kompakt ASCII representation
Du har en rigtig god pointe, som jeg ikke har haft øje på.

Skulle selv bare bruge en hurtig sløring af data, og der var LosFormatteren ok. 99 ud af 100 brugere vil ikke kunne få noget ud af den serialicerede værdi, og dermed mener jeg den er 'skjult'.

Jesper Denmark

26-08-2009 21:16:34 #

Claus Christiansen

Hej Jesper.

Jacob har kommenteret delen om at skjule data, hvilket du osse selv pointerede. Jeg vil så 'brokke' lidt over, at du sammenligner det med en hash til kontrol af integritet.

En base64-repræsentation er ikke en særlig god hash-funktion, og som kryptografisk hash er den fuldstændig uanvendelig. Nu er din 'brøde' ikke så stor, men kan en grøn udvikler gennemskue det?

Min pointe er at holde pærer og æbler for sig. Frameworket har glimrende funktioner til integritetskontrol og andre funktioner til data-encoding.

Claus Christiansen Denmark

Kommentarerne er lukkede

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen | Modified by Mooglegiant

About

Mit navn er Jesper Jensen, og jeg arbejder til dagligt som web-udvikler hos DGI, hvor mit speciale er klientside applikationer. Før det var jeg nogle år i robotbranchen, hvor jeg arbejdede med 3D simulering og system koordinering. Jeg elsker webudvikling, og specielt JavaScript har min interesse. Jeg har blogget om mine oplevelser med udvikling siden 2004

Calendar

<<  juli 2010  >>
mationtofr
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

View posts in large calendar

RecentComments

Comment RSS