Archive for Februar 6th, 2005

Cache-Problem bei IIS 6

Ein interessantes Problem hat “ASP.NET Codebook“-Co-Autor Stefan Falz beim Einsatz von IIS 6 mit bestimmten Ordnernamen und bestimmten Dateitypen gefunden:

Verwendet man innerhalb einer Applikation einen Ordner mit einer Tilde (“~”) am Anfang, dann werden verschiedene Dateitypen (.css, .js, .htm) vom Server offensichtlich gecachet. Soweit, so unproblematisch.

Dumm nur, dass der IIS Änderungen an diesen Dateien nicht mehr erkennt! Sogar ein Umbenennen bleibt erfolglos! Und das, obwohl sämtliche Caching-Einstellungen im Browser und auf dem Server so gesetzt werden, dass kein Caching erfolgen soll.

Um dieses Verhalten nachzustellen, können Sie folgendes ASP-Script verwenden:



   
   

    Hallo Welt

Richten Sie unterhalb des Verzeichnisses, in dem sich das ASP-Script befindet, einen Ordner “~test” ein und hinterlegen Sie dort folgendes Stylesheet:

BODY
{
    font-family     : verdana;
    font-size       : 30px;
    font-weight     : normal;
}

Rufen Sie nun die Datei index.asp per Browser vom Server (der ein IIS 6 sein sollte!) ab.

Öffnen Sie nun die css-Datei erneut mit einem Editor Ihrer Wahl, und ändern Sie die Schriftgrösse so ab, dass in der Datei beispielsweise eine andere Schriftart steht:

BODY
{
    font-family     : verdana;
    font-size       : 20px;
    font-weight     : normal;
}

Rufen Sie die Datei index.asp erneut im Browser auf. Sehen Sie den Unterschied? Können Sie auch nicht, denn der Server cachet die geänderte Datei weiterhin.

Ändern Sie nun den Namen des Ordners von “~test” nach “test”. Vergessen Sie nicht, den Pfad in der Datei index.asp anzupassen. Wiederholen Sie nun die obigen Schritte – Sie werden feststellen, dass IIS die Datei nicht cachet bzw. die Änderung an der Datei erkennt.

Dieses Verhalten tritt bei einem IIS 6 mit allen aktuellen Patches auf. Wie es mit älteren Versionen aussieht, bleibt noch zu testen.

Mittlerweile hat Stefan das Problem in der ASP-FAQ noch etwas ausführlicher beschrieben:

Ein ähnliches Problem betreffend das sogenannte Kernel Mode Caching finden Sie hier beschrieben:

…und es sprach King James…

…und heraus kam leider nix Sinnhaftes. James Gosling, Vater von Java, schlug mal wieder in Richtung .NET zu:

“They decided that they needed to be able to support C and C++, and they make a big deal of the fact that they support C and C++. But what they don’t talk about very much is that their support of C and C++ creates a security hole big enough to drive many, many large trucks through.”

Auf gut Deutsch: Microsoft hat mit der Unterstützung von C und C++ im .NET Framework Sicherheitslücken geschaffen, die so gross seien, dass viele, viele grosse Trucks durch fahren könnten.

Danke James, good point. Nur dumm, dass C und C++ (ersteres wird überhaupt nicht explizit unterstützt) entweder zu Managed Code kompiliert werden (und dann gibt es die Sicherheitslücken nicht, denn die CLR erlaubt keine Zeiger, etc.) oder zu Unmanaged Code kompiliert werden. Dann gibt es die üblichen potentiellen Sicherheitslücken (Zeiger, Overflows, etc.), nur ist das dann kein .NET Code mehr!

Da hat wohl jemand das .NET Framework mit dem Visual Studio .NET verwechselt? Macht ja nix, ist ein typischer Einsteiger-Fehler, James…