web-dev-qa-db-ja.com

+文字を含むURLのIIS7URL書き換えブレーク

他のいくつかのWebサーバーのリバースプロキシとして機能するIIS7サーバーがあります。他のサーバーは異なるポートで実行されるため、IIS7サーバーは「わかりやすいURL」を提供し、すべてポート80で提供します。URL書き換えは、要求をバックエンドサーバーに渡すために使用されます。

そのようなサーバーの1つがTeamCity(継続的インテグレーションおよびビルドサーバー)です。このサーバーは、ビルドの結果(「ビルドアーティファクト」)をダウンロードする方法を提供します。通常、これらのアーティファクトはZipアーカイブです。 URLの例を次に示します。

http://build.teamserver.tigranetworks.co.uk/repository/download/bt25/4164:id/ASCOM+Telescope+Driver+for+AWR+6.0.40.825.Zip

ASCOM+Telescope+Driver+for+AWR+6.0.40.825.Zipの+文字は、実際には最終ファイル名のスペースです。 TeamCityサーバーは+文字を入力します。

このリンクをクリックすると、次のエラーが表示されます IIS7サーバーから

404 - ファイルまたはディレクトリが見つかりません。

探しているリソースが削除されているか、名前が変更されているか、一時的に利用できない可能性があります。

IIS7ログファイルに表示される実際のURLは次のとおりです。

/repository/download/bt25/4164:id/ASCOM+Telescope+Driver+for+AWR+6.0.40.825.Zip

書き換えルールはパターン(.*)に一致し、を使用してURLを書き換えます。

http:// localhost:8022 / {R:1}

これが興味深いことです。ブラウザに戻って+文字を編集し、慎重にスペースに置き換えると、URLが機能します。

+文字に対してURL書き換えがどういうわけか機能していないと結論付けます。これは既知の問題ですか?助言がありますか?

6
Tim Long

H0tw1r3はすでに回答しているため、URL検証を無効にする必要があります。

IISサーバーレベルで実行する場合は、次のコマンドを使用します。

%windir%\system32\inetsrv\appcmd set config /section:requestfiltering /allowdoubleescaping:true

アプリケーションレベルでのみ無効にする場合は、web.configファイルに次のセクションを追加するだけです。

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true" />
    </security>
</system.webServer>
5