22. August 2007

Apache ETag

Category: Hacking,Internet — Christian @ 00:22

Wir kennen ja aus dem Fingerprinting der Webserver, dass Microsofts IIS gerne eine ASPSESSIONID mitschickt und Apache ein ETag. Das ist ganz praktisch, um den Webserver zu identifizieren, wenn kein brauchbarer Server-String mitgeschickt wird. (Alternativ kann man auch einfach Netcraft fragen.)

    ~> telnet www.mitternachtshacking.de 80
    HEAD / HTTP/1.0
    HTTP/1.1 200 OK
    Date: Sun, 26 Aug 2007 04:21:17 GMT
    Server: Apache/2.2.0 (Linux/SUSE)
    Last-Modified: Wed, 26 Apr 2006 15:56:38 GMT
    ETag: "310f-2544-844df980"

Das ETag wird jedoch eigentlich verwendet, damit der Browser entscheiden kann, ob er ein Dokument bereits im Cache hat und nicht mehr neu laden muss oder ob er das Dokument neu anfordert.

Apache setzt das ETag normalerweise aus drei Informationen zusammen: aus der Inode-Nummer, dem Datum der letzten Dateiänderung und der Dateigröße. Das Datum und die Dateigröße sind bekannt. Kann man mit der Inode-Nummer nun etwas anfangen?

Einige Server setzen mit Hilfe der ETag-Direktive das ETag so, dass nur Änderungsdatum und Größe in das ETag einfließen. Das ist insbesondere dann relevant, wenn ein Reverse-Proxy Loadbalancing mehrerer Webserver anbietet. Wenn keine Inode-Nummer enthalten ist und Änderungsdatum und Größe bekannt sind, kann man dann mit dieser Information Cache-Informationen invalidieren?

Mal testen …

(via Joshua Schachter)