Die Resource wurde blockiert wegen eine MIME-Typ-Konfliktes (nosniff)

Fehler beim Zugriff auf ein Script, welches durch PHP generiert wird.

Für einen Kunden habe ich versucht, ein Script auf einen neuen Server umzuziehen. Dabei handelt es sich um das “Member Login Script” von PHPJabbers. Der Fehler ist aber unabhängig vom Script und tritt auf, wenn der Server einen anderen Mime-Typ als Dokument zurückliefert, als erwartet. Im konkreten Fall kam in der Fehlerkonsole des Browsers folgender Fehler:

Die Ressource von "/user/members/index.php/user/members/index.php?controller=pjFront&action=pjActionLogin" 
wurde wegen eines MIME-Typ-Konfliktes ("text/html") blockiert (X-Content-Type-Options: nosniff).

Die Resource bzw. Die PHP spuckt ein Java-Script aus und wird mit einem <script> Tag eingebunden. Hier wird der Typ “text/javascript” erwartet, der HTTP-Header gibt aber vor, dass hier “text/html” vom Script ausgeliefert wird.

Was ist der “nosniff” Header

Kurz zur Definition:

Der “X-Content-Type-Options: nosniff”-Header ist ein HTTP-Header, der von Webservern gesendet wird, um den Browser anzuweisen, den MIME-Typ eines Dokuments nicht zu erraten und stattdessen den MIME-Typ zu verwenden, der vom Server bereitgestellt wird. Das bedeutet, dass der Browser das Dokument nicht als einen anderen Typ interpretiert als vom Server beabsichtigt.

Dies ist wichtig, um Sicherheitsprobleme zu vermeiden, die durch den sogenannten “MIME-Sniffing” verursacht werden können. MIME-Sniffing ist ein Verhalten von Browsern, bei dem sie versuchen, den MIME-Typ eines Dokuments zu erraten, wenn er nicht explizit vom Server angegeben wurde. Dies kann zu Sicherheitsproblemen führen, da ein Angreifer ein Dokument mit einem MIME-Typ versehen kann, der vom Browser als sicherer angesehen wird als der tatsächliche MIME-Typ des Dokuments.

Durch das Senden des “X-Content-Type-Options: nosniff”-Headers kann ein Webserver verhindern, dass Browser Dokumente mit einem falschen MIME-Typ interpretieren und somit Sicherheitsprobleme vermeiden.

Problemlösung

Hintergrund ist also eine Serverkonfiguration. Diese kann nun entweder verändert werden, z.B. über HtAccess:

<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
</IfModule>

Dies brauchte bei mir allerdings keinen Erfolg. Entweder war das entsprechende Modul nicht installiert oder .htaccess Dateien waren schlicht deaktiviert.

In meinem Fall habe ich mir so beholfen, dass ich ein Proxy-Script geschrieben:

<?php
header("Content-Type: text/javascript");
$content = file_get_contents("/user/members/index.php?controller=pjFront&action=pjActionLogin");
echo $content;

Dieses setzt zuerst den richtigen Header, anschließend wird das Script eingelesen und einfach ausgegeben. Anschließend funktionierte das Script und der Login erschien.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert