IIS7에서 호스팅 된 ASP.NET MVC 1.0 앱 내부의 모든 *.php, *.cgi 등에 대한 요청을 어떻게 차단합니까?

StackOverflow https://stackoverflow.com/questions/1539415

  •  20-09-2019
  •  | 
  •  

문제

경로 정보에 관계없이 .php 또는 .cgi에 대한 요청을 차단하고 싶습니다.

예를 들어, 다음 URL을 사용하는 경우.

http : //마이 사이트/admin/scripts/setup.php

기존 경로와 일치합니다.

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

그러나 스크립트 용 컨트롤러가 없으므로 MVC는 다음을 던졌습니다.

icontrollerFactory`` ''Scripts '라는 컨트롤러의 컨트롤러를 반환하지 않았습니다.

내가 정말로 선호하는 것은 MVC가 컨트롤러에 도달하기 전에 요청이 단순히 어려운 실패로 충족된다는 것입니다.

나는 Global.asax에서 application_beginrequest를 연결하고 새로운 httpexception (404, "찾을 수 없음")을 던져서 이것을 할 수 있다는 것을 알고 있지만, 내가 찾고있는 우아한 솔루션은 아닙니다.

나는 이것이 효과가 있기를 정말로 바랐다.

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

그러나 그렇지 않습니다.

참고 : Sean Lynch의 답변은 훌륭하게 작동하지만 여전히 System.Web.Routing 또는 System.Web.MVC 기반 솔루션을 정말로 좋아합니다. 이렇게하면 사용자가 런타임에 자신의 제외를 추가 할 수 있습니다.

도움이 되었습니까?

해결책

호스팅 제공자가 IIS7 URL Rewrite 모듈을 지원하는 경우이 링크를 확인할 수 있습니다.

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>

다른 팁

나는 이것이 오래된 게시물이라는 것을 알고 있지만 서브 폴더 내의 요청을 포함하여 PHP 요청 (및 일부)에 대한 무시 경로를 찾고 있다면 아래 코드가 잘 작동했습니다 ( Phil Haack의 노선을 무시합니다)

또한 가끔 Apple Touch 아이콘 요청에 대한 특정 무시 경로를 추가했으며 (다른 치수에 대한 와일드 카드 사용) Favicon에 대한 다른 파일 확장을 허용했습니다 (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 파일에 대한 요청 차단을 사용하는 것이 바람직하다고 생각합니다.

나는 찾았다 ASP.NET에서 경로를 무시하는 방법 URL 라우팅을 형성합니다 이를 위해 작동 할 수 있습니다 중단 핸들러 클래스, 그리고 .php에 대한 요청이 라우팅을 통해 실행되는 한 이것은 아마도 작동 할 것입니다.

.php 요청이 라우팅 핸들러를 통과하지 않으면 이는 작동하지 않을 것입니다.

Microsoft의 URLSCAN ISAPI 필터로 IIS에 도달하기 전에 이러한 확장을 차단할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top