0

web.configを含むURLを使用してIIS(ホストASP.NET MVC 3サイト)からページを要求すると、404エラーが発生します。app.configのURLには問題はありません。ローカルのVisualStudio開発サーバーには、このタイプのURLに関する問題はありません。

1-IISによってこのように処理される、web.config以外の特別な単語は何ですか?リクエストフィルタリングページ/非表示セグメントタブでは、これは現在の状態です。

ここに画像の説明を入力してください

IISはbin、App_codeなどの単語を問題なく処理するため、これらは特別な単語ではないと思います。

回答:これらはIISによってこのように処理されている単語だと思います。したがって、これらは私が考えるデフォルトの単語であり、このリストは構成可能です(新しいアイテムをこのリストに追加できます)。

2-これらの特別な単語を含むURLを処理するためのクイックフィックス(web.configの変更など)はありますか?

ところで、私はweb.configファイルを提供しようとはしていません。URL形式は次のとおりです: www.mysite.com/es/web.config/1

4

2 に答える 2

2

Request Filteringこれは、次のセクションのIIS構成の一部です。

リクエストフィルタリング

フィルタを追加/削除できます。
ただし、これを削除するのは本当に悪い考えweb.configだと思います。

http://www.iis.net/configreference/system.webserver/security/requestfiltering

于 2013-02-01T16:51:38.730 に答える
0

原因:

すでにIIS構成のスナップショットを示したように。これらは.Netアプリケーションで予約されているフォルダーとファイルであるため、IISはセキュリティのためにそれらを保持したいと考えています。

これらの文字列を含むURLは、これらが2つのスラッシュの前にあり、最後?に2つのスラッシュの間にある場合にのみ、404応答として返されます。/../例:www.example.com/bin/anything.extまたはwww.example.com/folder/sub/web.config

IISは、これらの文字列をどこでも一致させます。web.configは、任意のディレクトリレベルで実行できます。

それらの文字列に何かがある場合は、IISによってページが提供されます。例:www.example.com/bin-folder/anthing.extまたはwww.example.com/sub/bin.htmlまたはwww.example.com/-web.confing/page.aspxはOKです。


2つのスラッシュの間に挟まれないように、これらの文字列で他の単語を使用するか、拡張子の付いたURLの最後で使用することをお勧めします。

例:www.example.com/en-web.config/1またはwww.example.com/en/1/web.config.aspx



それでも私は1つのトリッキーな解決策を持っています:

URLに他の単語が含まれていないこれらの文字列が本当に必要な場合は、をお勧めしuse URL-ReWrite.ます。これは全体としては迅速ではないかもしれませんが、2番目のステップを除いて、その迅速で便利な2番目のステップはアプリケーションによって異なります。

1-このルールをIISのトップレベルに追加します。

正規表現の一致:(/ web | ^ web)\。(config $ | config /) //OR as your requirement

書き直し:handler.aspx?url = {REQUEST_URI}

<rule name="web-config" stopProcessing="true">
  <match url="(/web|^web)\.(config$|config/)" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
  <action type="Rewrite" url="handler.aspx?url={REQUEST_URI}" appendQueryString="false" />
</rule>

2-handler.aspxまたは他の言語ページで)urlGET変数を確認し、それに応じて応答します。Request.QueryString("url")

  • ここでは、セキュリティを制御しているので注意してください。
  • handler.aspx or handler.phpリダイレクトなどではなく、実際のページコンテンツを応答に含めることをお勧めします。
  • コンテンツを含める前に(正規表現などで)最初にURLを確認し、ハードコードされたコンテンツを含める前に、URLのどの部分も変数に取り込まず、その変数をresponse-inclusion-codeで使用してください。

3-その後、ついにIISマネージャーから、特定のWebサイトで、[フィルタリングの要求]-> [非表示セグメント]タブに移動し、目的の文字列を削除します。例:web.config。この手順は、web.configでも実行できます。

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="209715200" />
    <hiddenSegments>
      <remove segment="web.config" />
    </hiddenSegments>
  </requestFiltering>
</security>

これで、IISがページを提供し、ハンドラーページがユーザーブラウザーにまったく同じURLで出力を表示します。

于 2015-06-16T12:10:33.637 に答える