14

パス情報に関係なく、.php または .cgi へのリクエストをブロックしたいと思います。

たとえば、次の URL が使用されている場合:

http:// mysite /Admin/Scripts/Setup.php

これは既存のルートと一致します。

routeCollection.MapRoute("Admin", "admin/{controller}/{action}/{uid}/{*pathInfo}", new { controller = "Admin", action = "Index", uid = "" });

ただし、スクリプト用のコントローラーがないため、MVC は次をスローします。

IControllerFactory '' は、'scripts' という名前のコントローラーのコントローラーを返しませんでした。

私が本当に望んでいるのは、MVC がコントローラーに到達する前に、要求が単純にハード フェイルで満たされることです。

Application_BeginRequest を Global.asax にフックし、新しい HttpException(404, "Not Found") をスローすることでこれを実行できることはわかっていますが、それは私が探しているエレガントなソリューションではありません。

私はこれがうまくいくことを本当に望んでいました:

routeCollection.IgnoreRoute("{resource}.php/{*pathInfo}");

しかし、そうではありません。

注: Sean Lynch の回答はうまく機能しますが、それでも System.Web.Routing または System.Web.Mvc ベースのソリューションが本当に必要です。そうすれば、ユーザーが実行時に独自の除外を追加できるようになります。

4

4 に答える 4

15

これが古い投稿であることは知っていますが、サブフォルダー内のリクエストを含むphpリクエスト(およびその他のリクエスト)の無視ルートを探している場合は、以下のコードがうまく機能することがわかりました(Phil Haackからの無視ルートの投稿から適応)

また、不定期の Apple タッチ アイコン リクエスト (さまざまなサイズにワイルドカードを使用) に対して特定の無視ルートを追加し、ファビコンのさまざまなファイル拡張子を許可しました (Google ツールバーおよびその他の一部のブラウザーはpng および gif ファビコンを探します)。

もちろん、すべての画像ファイル拡張子に対して無視ルートを追加することもできますが、私の場合は、他のリクエストのいくつかをルーティングしたいと考えています。

routes.IgnoreRoute("{*allphp}", new { allphp = @".*\.php(/.*)?" });
routes.IgnoreRoute("{*allcgi}", new { allcgi = @".*\.cgi(/.*)?" });
routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });

routes.IgnoreRoute("{*favicons}", new { favicons = @".*favicon\.(ico|gif|png)(/.*)?" });
routes.IgnoreRoute("{*allappleicon}", new { allappleicon = @"apple-touch-icon-.*\.png(/.*)?" });

これらの無視ルートがあるにもかかわらず、アクセスできる場合は、php ファイルのリクエストブロックを使用することをお勧めします。

于 2011-11-09T18:50:31.840 に答える
10

ホスティング プロバイダーが IIS7 URL 書き換えモジュールをサポートしている場合は、次のリンクを確認できます。

http://learn.iis.net/page.aspx/499/request-blocking---rule-template/

ここでの更新は、system.webserver セクションの web.config に入れるものです。

<system.webServer>
    <rewrite>
        <rules>
            <rule name="RequestBlockingRule1" patternSyntax="Wildcard">
                <match url="*" />
                <conditions>
                    <add input="{URL}" pattern="*.php*" />
                </conditions>
                <action type="CustomResponse" statusCode="403" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
于 2009-10-08T17:51:34.117 に答える
0

これらの拡張機能は、Microsoft の UrlScan ISAPI フィルターを使用して IIS に到達する前にブロックできます。

于 2009-10-09T02:36:22.547 に答える
0

How to ignore route in asp.net forms url routingこれでうまくいく可能性があります.

.php リクエストがルーティング ハンドラを通過しない場合、これはおそらく機能しません。

于 2009-10-08T20:04:27.000 に答える