Frage IIS6 vs. IIS7 und IIS7.5: Behandlung von URLs mit Pluszeichen (+) in der Basis (nicht Querystring)


Für jede URL mit einem Pluszeichen (+) in der Basis-URL (nicht der Abfragezeichenfolge) scheinen IIS7 und IIS7.5 (Windows Server 2008 und 2008 R2) die URL nicht an den Standardhandler einer ASP.NET-Anwendung weiterzuleiten . Ich habe das Problem mit einem benutzerdefinierten HTTP-Handler bemerkt *.html aber ich habe das gleiche Problem mit *.aspx. IIS6 (Server 2003) hat kein Problem mit diesen gleichen URLs.

Um das Problem in einer ASP.NET-Site zu replizieren, habe ich eine Gruppe von ASPX-Dateien erstellt, die eine einfache Response.Write mit verschiedenen Namen erstellt haben:

  1. test_etwas.aspx
  2. test_some + thing.aspx
  3. test_some thing.aspx

Die dritte Datei war ein Test, um festzustellen, ob IIS7 [.5] Pluszeichen als Leerzeichen behandelt (wie in der Abfragezeichenfolge); dies scheint nicht der Fall zu sein. Mit all diesen Dateien an Ort und Stelle, schlagen http://somehost/test_some+thing.aspx oder http://somehost/test_some%2bthing.aspx funktioniert gut in IIS6, aber 404 in IIS7 / IIS7.5 bevor Sie zu jedem ASP.NET-Handler gelangen. Gibt es eine Konfiguration in IIS7 / 7.5, die ich vermisse, damit es ein Pluszeichen in der URL "sieht", ohne die letzte Erweiterung zu verpassen, die verwendet wird, um einen HTTP-Handler zu bestimmen?


34
2017-10-19 17:29


Ursprung


Ich frage mich, ob die Flucht aus dem Pluszeichen helfen würde. Könnte sein \+? - Dennis Williamson


Antworten:


Nach der Suche nach mehr Kombinationen von IIS und Plus scheint IIS7 [.5] standardmäßig aus Gründen der Angst vor der Verwendung dieses Zeichens URLs mit einem Pluszeichen abzulehnen; Dieses Symbol ist jedoch weiterhin in der Abfragezeichenfolge zulässig. Das Lösung besteht darin, das Anforderungsfilterung-Attribut standardmäßig zu ändern <system><webServer><security><requestFiltering> um doppelt codierte Zeichen mit einem Befehlszeilenaufruf zuzulassen (was letztendlich Ihre ASP.NET web.config ändert):

%windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:system.webServer/security/requestFiltering -allowDoubleEscaping:true

Dies mag ein bisschen gefährlicher sein, als man es vorzieht, mit ihrer Website zu sein, aber es schien keine Möglichkeit zu geben, spezifischer zu sein, als eine Decke zulassen würde. Die Warnungen beziehen sich auf die fehlende Übereinstimmung zwischen der Verwendung eines Plus in einer URL und seiner typischen Übersetzung als Leerzeichen. Es sieht so aus, als ob die einzige Alternative darin besteht, die Verwendung von Pluszeichen in Ihren URLs zu unterlassen.


34
2017-10-20 13:41



Nur ein Hinweis: Sie müssen dies nicht auf der Vorlage auf der Root-Ebene tun. Dies kann in einer beliebigen Web.config-Datei erfolgen oder auf einen Unterordner mit einem <location /> -Tag angewendet werden. - mdonatas


Ich habe gerade herausgefunden, wie man eine Rewrite-Regel erstellt, um IIS7 davon zu überzeugen, Pluspunkte in Leerzeichen in URLs zu mappen. In meinem Fall war es so, dass Legacy-Lesezeichen oder Hyperlinks funktionierten.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
<security>
  <requestFiltering allowDoubleEscaping="True" />
</security>
<rewrite>
  <rules>
    <rule name="RewriteUserFriendlyURL1" stopProcessing="false">
      <match url="\+" />
      <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="{UrlDecode:{REQUEST_URI}}" />
    </rule>
  </rules>
</rewrite>
  </system.webServer>
</configuration>

Sehen mein Blogpost für weitere Details und Referenzen.


9
2017-07-03 00:20



Ich löste ein Problem, bei dem ich Legacy-URLs mit Pluszeichen in der Abfragezeichenfolge unterstützen musste, indem ich nur den obigen Sicherheitsabschnitt verwendete, d. H. "AllowDoubleEscaping" auf "True" einstellte. - stephen
Ich habe einen einzigartigen Fall - einige Legacy-URLs haben zwei aufeinanderfolgende Pluszeichen, dh "++". IIS scheint eine spezielle Regel dagegen zu haben. irgendwelche Ideen? - boomhauer
@boomhauer müssen Sie möglicherweise einen Handler schreiben ... oder einen anderen Webserver verwenden, um diese URLs zu hosten? Einmal machte ich Apache mod_rewrite mit einer Reihe von Legacy-URLs umgehen und sie an verschiedene neue Orte umleiten, und es schien ein wenig flexibler. - Nathan