
Ich habe eine URL-Umschreibregel, um den Zugriff auf die Site von einer anderen URL als einer definierten Liste aus zu verhindern. Die Regel wird zurückgegeben, 400 Bad Request
wenn die URL nicht in der Liste enthalten ist.
<rule name="No unknown hosts" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^example\.com$" negate="true" />
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
<add input="{HTTP_HOST}" pattern="^admin\.example\.com$" negate="true" />
</conditions>
<action type="CustomResponse" statusCode="400" />
</rule>
Beispiele für URLs, die ich blockieren möchte, sind mail.example.com
oder 102.15.63.233
. Das funktioniert super,außerwenn ein verstecktes Segment an die URL angehängt wird, etwa so mail.example.com/bin/
. Dies führt zu meiner benutzerdefinierten 404-Fehlerseite, die unter anderem beschissen aussieht, weil alle Stylesheets und anderen Assets (Bilder usw.) nicht aufgelöst werden können, da die URL blockiert ist und 400 zurückgibt. Schlimmer noch, es löst einen Fehler bei PCI-DSS-Scans aus, weil diese denken, dass ich das Durchsuchen von Verzeichnissen zulasse.
Ich habe fast den ganzen Tag damit verbracht, auf jede erdenkliche Weise Google-Suchen durchzuführen, ohne Erfolg. Oh, der Grund für diese Vorgehensweise ist, dass ein ungültiger HOST-Header nicht dazu verwendet werden kann, unsere Site dazu zu bringen, auf eine bösartige Site umzuleiten (viele andere Rewrite-Regeln basieren auf dieser Funktionalität). Ich hoffe, dass jemand hier eine Antwort hat.