Category Archives: IIS7

.NET fejtörő 4. – megoldás

Kérdés: miért nem jó, ha az ASP.NET Machine Key-emet Random.NextBytes()-szal generálom?

A Machine Key-t alapban viewstate validálásra használja az ASP.NET. HMAC algoritmussal csinál egy hasht, amihez a Machine Key-t mint kulcsot is felhasználja. Ez a kevésbé problémás dolog. Ami sokkal veszettebb, hogy amikor beléptetünk valakit az ASP.NET forms security-vel, akkor a beléptetett felhasználót azonosító adatot ezzel a Machine Key-jel titkosítják. Ha valaki megismeri ezt a kulcsot, akkor tud generálni kamu kukit, amibe azt a user id-t ír be, amit csak akar. Azaz meg tud személyesíteni másokat. Ebből aztán lesz spoofing, vagy akár elevation of privilege. Magyarul senki nem szeretné, ha bárki más beléphetne a nevében egy védett website-on. Például az internetes bankjába.

Szóval, talán most már érthető, a Machine Key-t nem szeretnénk, ha bárki megszerezné vagy kitalálná. Megszerezni csak a site feltörésével lehet, és admin jogokkal, tegyük fel ez nem történt meg. Ha azonban a véletlen sorozat generátorunk kiszámítható, akkor más is ugyanazzal az algoritmussal tud generálni egy olyan kulcsot, amit én is generáltam. És már jönnek is be más nevében.

A .NET Random pszeudo-random generátor, azonos seed-del mindig ugyanaz a sorozat jön ki belőle. Azt mondjátok de én ravasz vagyok, és beadom a DateTime.Now.Ticket neki inputként, az úgysem tudja a támadó. Nem tudja, de pörgetni ő is tudja ezt a számot addig, amíg ki nem találja a megfelelő seedet.

Mi a megoldás? Olyan random generátor kell, ami teljesen kiszámíthatatlan. Pl. a termikus zaj digitalizálva tökéletesen jó erre a célra. Ha ilyen modul nincs a gépben, akkor a Windows megpróbál valami nagyon randommal kijönni, például összerakva olyan vad perf counter értékeket, mint a proci ventilátor sebessége és egyebek.

A lényeg, hogy ha cripto szinten random érték kell, akkor az RNGCryptoServiceProvider típust kell használni erre a célra.

Egyébként meg IIS 7.5-től machine key-t tud generálni az IIS Manager GUI is. :)

Webkiszolgálás sebességmérése logparserrel

Elég kevesen használják a logparsert, pedig szenzációs. Azt képzeld el, hogy szöveges adatokon tudsz sql lekérdezéseket futtatni. Pl. IIS logokon. Relációs adatbázis nélkül, és elég gyorsan. Van még kérdés? Nagyon jó, na. :)

Ha pl. szükséged van egy baseline-ra mielőtt nekiállnál optimalizálni a website-ot, jó lenne tudni az átlagos kiszolgálási időket mindenféle tartalomra, pl. aspxekre, akkor a logparserrel pillanatok alatt ki lehet nyerni statisztikákat.

Bővebben itt.

Microsoft Application Request Routing for IIS 7

Érdekes kis apróságra akadtam. A fenti cucc egy alkalmazásszintű router, amivel IIS-ekből álló webfarm gépeire lehet szelektíven ráirányítani a terhelést.
Tehát nem azt csinálja, mint az NLBS, hogy IP szinten dönt, hanem általunk megírt logika alapján osztja szét a terhelést a webszerverek között, ami adott esetben igen hasznos lehet.
Még nem látom át hogyan lehet ezzel kiküszöbölni a single point of failure-t, de rajta fogom tartani a szemem.

# HTTP based routing decisions
Unlike hardware load balancers that make the routing decisions at the IP level, Application Request Routing makes the routing decisions at the application level. Working with URL rewrite module, powerful routing rules can be written based on HTTP headers and server variables.
# Load balance algorithms
A user selected load balance algorithm is applied to determine which content server is most appropriate to service the HTTP requests. Six algorithms are provided.
# Health monitoring
Both live traffic and specific URL test are used to determine the health of content servers. A set of configuration parameters are provided to define the meaning of server health.
# Client affinity
Using a cookie, Application Request Routing can affinitize all requests from a client to a content server. It differentiates the clients behind NAT, so each client is treated independently. This feature requires that the clients accept cookies.
# Host name affinity
“Host name affinity” is a specific feature for shared hosters. It changes the deployment topology to minimize and streamline administration and to create additional business opportunities.
# Multiple server groups
Application Request Routing can manage multiple server groups, which are logical groupings of content servers in an environment. This feature allows Application Request Routing to be used in pilot management and A/B testing scenarios.
# Management and monitoring via UI
All configuration settings and aggregated runtime statistics of Application Request Routing are managed and viewable via IIS Manager.
# Failed Request Tracing Rules
Specific traces have been added to quickly troubleshoot and diagnose Application Request Routing.

Webszerver compression – lassít vagy gyorsít?

Nem kérdés, hogy a kliens jelentősen gyorsabban hozzájut a tömörített tartalomhoz, pl. a google lapjai többek között ezért gyorsak.
De mekkora hatással van ez a szerverre? Mennyire lassítja azt le? Eddig az volt a fejemben, hogy ez a szükséges rossz, a szerver procija gőzerővel tömörít, ezért bár a kliens megnövelt felhasználó élményt él át, a szerver ki lesz terhelve. De NEM és nem!

Mivel a tömörített tartalmat letárolja az IIS, ezért ha már egyszer lezajlott a tömörítés, a továbbiakban már csak mint statikus fájlt kell kiszolgálni a szervernek, ráadásul sokkal kisebbet, mint az eredeti. Ennek eredményeképpen nem csak, hogy jobb lesz az élmény a kliensen, de még a szerver is örül. Ez a nem semmi, mi? Persze dinamikus tartalom esetén már sokkal jobban meg kell gondolni, ott általában nem megy az újrahasznosítás.

Mindezt lehet kombinálni SSL-lel is, ekkor is örül a szerver, mert kisebb tartalmat kell titkosítani, és ellentétben a tömörítéssel a titkosítás valóban nagyon proci intenzív. Tessék megnézni a linkelt cikket, tanulságos.
Szeressétek a tömörítést, nem kerül semmibe bekapcsolni (IIS7-en, IIS6-ban nincs kivezetve a GUI-ra).

Őstermelők és egyéb farmtulajdonosok figyelmébe: MSDeploy

Az IIS7-ben van ugye a közös konfig, amit előreláthatóan demózni fogok majd márciusban a Launch-on. Ehhez már csak egy dolog kellett a webfarmoláshoz, a tartalom szinkronizálásának lehetősége. Most már ez is egyenesben van. Gratula az IIS7 bandának, tehetséges bagázs ez. Igyeszek összerakni egy olyan demót, amiben lesz több gép, shared config és MSDeploy is. Ezúttal igyekszek nem szívatni magam, mint az előző előadás során.

IIS7 konferencia anyagok

Lement a konferencia, kemény volt. Nem a konferencia, hanem a felkészülés. Írtam már, hogy esküdtek össze ellenem az elemek. Szó szerint, mert még az egerem elemei is kimerültek délre, így a helyi ABC-ben vettem bele gyorsan.
Szerencsére szinte minden működött jól, így tempósan tudtam adagolni a témát. Lehet, hogy volt akinek gyors volt, de én azokat az előadásokat szeretem, ahol sok a tartalom, zsibbad utána az ember agya, annyi újat hallott. Ez szerintem ilyen volt, és ennyi infót csak hadarva lehet elmondani. :)

A prezentációt és a demó fájlokat feltöltöttem , használjátok egészséggel. Van benne powershell cucc is, ez az első ps programom, de azért talán lehet belőle tanulni (nem 3 sors cat alma.txt :).

Update: Zokszigen kérésére felraktam pdfben is a prezentációt.