"클라이언트 (&)에서 잠재적으로 위험한 Request.Path 값이 감지되었습니다."


114

홈 페이지에 대한 요청 인 것처럼 임의의 URL을 지원해야하는 레거시 코드 문제가 있습니다. 일부 URL에는 "클라이언트에서 잠재적으로 위험한 Request.Path 값이 감지되었습니다 (&)" 오류를 생성하는 문자가 있습니다 . 이 사이트는 ASP.Net MVC 3 (C #)로 작성되었으며 IIS 7.5에서 실행됩니다.

다음은 URL의 예입니다.

http://mywebsite.com/Test123/This_&_That

포괄 루트 설정 방법은 다음과 같습니다 (특정 페이지를 잡을 다른 루트가 있습니다) ...

routes.MapRoute(
    "Default", // Route name
    "{garb1}/{garb2}", // URL with parameters
    new { controller = "Website", action = "Home", garb1 = UrlParameter.Optional, garb2 = UrlParameter.Optional } // Parameter defaults
);

web.config 파일에 다음을 추가했습니다.

<configuration>
    <system.web>
        <pages validateRequest="false" />
        <httpRuntime requestValidationMode="2.0" />
    </system.web>
<configuration>

URL을 잡아야하는 액션에 ValidateInput 속성도 추가했습니다.

public class WebsiteController : Controller
{
    [ValidateInput(false)]
    public ActionResult Home()
    {
        return View();
    }
}

하지만 여전히 오류가 발생합니다. 이유는 무엇입니까? 내가 뭐 놓친 거 없니? 지금은 로컬 개발 서버에서 실행 중입니다 (아직 프로덕션에서 이러한 수정을 시도하지 않았습니다).


1
컴퓨터로 돌아 오면 곧 확인할 특정 문자를 허용하는 설정이 있지만 URL을 urlencode 할 수 있습니까?
Adam Tuliper-MSFT


웹 사이트가 내부적으로 ' localhost / : // localhost / myWebsiteName ' 과 같은 URL을 생성하는 리디렉션을 시도한 이유가 무엇인지 모르겠습니다 . ASP.net 파이프 라인이 위험한 요청 URL로 간주하는 이유를 모르겠습니다.
RBT

제 경우에는 URL에 슬래시가 누락되었습니다. 가장 먼저해야 할 일은 URL의 오타를 확인하는 것입니다.
Kishan Vaishnav

답변:


162

구성 파일에서 이러한 설정을 시도 할 수 있지만

<system.web>
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
    <pages validateRequest="false" />
</system.web>

URL 경로에서 '&'와 같은 문자를 밑줄로 바꾸는 것을 피할 것입니다.


13
requestPathInvalidCharacters = ""가 트릭을 수행 한 것으로 보입니다. 감사. 안타깝게도 몇 년 동안 허용 해 왔으므로 계속해서 지원해야합니다.
Brian

5
보안 문제 아닙니까?
Marius Stănescu 2013 년

3
@MariusStanescu-본질적으로 보안 문제가 아닙니다. 그것은 당신이 그것으로 무엇을하는지에 달려 있습니다. 입력이 취해 져서 이스케이프되고 출력에 포함된다면 괜찮을 것입니다. 탈출하지 않으면 공격을받을 수 있습니다.
Justin Helgerson 2013-06-03

2
이 솔루션은 다음 오류를 제공 할 수 있습니다. HTTP 오류 500.19-내부 서버 오류 페이지의 관련 구성 데이터가 유효하지 않기 때문에 요청한 페이지에 액세스 할 수 없습니다.
Tom Stickel 2015 년

2
이 답변을 사용할 때 오류 500도 받았습니다. 이는 이미 <httpRuntime> 및 <pages> 태그가 있으므로 중복 충돌이 발생했습니다. 그것을 해결 한 후이 답변은 저에게도 잘 작동합니다.
Kallum Tanton 2015 년

5

나는 이러한 유형의 오류에 직면했습니다. 면도기에서 함수를 호출합니다.

public ActionResult EditorAjax(int id, int? jobId, string type = ""){}

선을 변경하여 해결

...에서

<a href="/ScreeningQuestion/EditorAjax/5&jobId=2&type=additional" /> 

<a href="/ScreeningQuestion/EditorAjax/?id=5&jobId=2&type=additional" />

내 route.config는

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "RPMS.Controllers" } // Parameter defaults
        );

1

mvc의 일부 텍스트 상자에 대해서만 Html 태그를 허용하려는 경우

당신은 한 가지를 할 수 있습니다

컨트롤러에서

 [ValidateInput(false)]
public ActionResult CreateNewHtml()  //view
{
    return View();
}
[ValidateInput(false)]
[HttpPost]
public ActionResult CreateNewHtml(cbs obj)//view cbs is database class
{
    repo.AddHtml(obj);
    return View();
}

1
OP는 그가 지원해야하는 URL (텍스트 상자 내용이 아님)을 명시 적으로 말하며 HTML에 대한 언급도 없으므로 귀하의 답변은 주어진 질문에 실제로 적용되지 않습니다.
Oliver

2
질문에는 해당되지 않지만 선택 사항인지 몰랐기 때문에 찬성했습니다. 감사합니다 @Pavan
MickJuice

0

Silverlight ArcGIS 맵 뷰어가 맵을로드하지 못하는 이유를 파악하려고 할 때 Fiddler에서 이와 동일한 오류가 발생했습니다. 우리의 경우에는 코드의 URL에 오타가있었습니다. 어떤 이유로 거기에 등호가있었습니다.
http : // someurltosome / awesome / place
대신 http : = //
someurltosome / awesome / place

등호를 제거하면 (물론) 훌륭하게 작동했습니다.


0

web.config 파일에 아래 줄이 있는지 확인하십시오.

<system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.