잠재적으로 위험한 요청입니다.클라이언트에서 양식 값이 탐지되었습니다.
사용자가 다음을 포함하는 내용을 게시할 때마다<또는>웹 애플리케이션의 페이지에서 이 예외가 발생합니다.
누군가 텍스트 상자에 문자를 입력했기 때문에 예외를 던지거나 전체 웹 응용 프로그램을 손상시키는 현명한 방법에 대한 논의에 들어가고 싶지 않지만, 이 문제를 처리할 수 있는 우아한 방법을 찾고 있습니다.
예외를 트래핑하고 있습니다.
오류가 발생했습니다. 다시 돌아가서 전체 양식을 다시 입력하십시오. 그러나 이번에는 <을(를) 사용하지 마십시오.
제가 보기엔 전문적이지 않은 것 같아요
유효성검사 비활성화( 불가능)validateRequest="false"는 이할 수 공격에 는 이 오류를 방지할 수 있지만 페이지가 여러 공격에 취약하게 됩니다.
파일: 됩니다.HTML 제한 문자가 포함된 포스트백이 발생하면 양식 집합에 게시된 값은 자동으로 HTML 인코딩됩니다.그래서 그.Text내 텍스트 상자의 속성은 다음과 같습니다.something & lt; html & gt;
제가 핸들러에게 이것을 할 수 있는 방법이 있나요?
당신은 게시된 모든 데이터를 인코딩하려고 해서 잘못된 각도에서 공격하고 있다고 생각합니다.
고참:"<또한 데이터베이스 필드, 구성, 파일, 피드 등과 같은 다른 외부 소스에서 올 수도 있습니다.
"게가다,"",<본질적으로 위험하지 않습니다.에) 출력으로 않은 (XSS는) HTML의 출력입니다.
다른 맥락에서 다른 하위 문자열은 위험합니다. 예를 들어 사용자가 제공한 URL을 링크에 쓰는 경우 하위 문자열 "javascript:위험할 수 있습니다.반면 SQL 쿼리에서 문자열을 보간할 때는 단일 따옴표 문자가 위험하지만 양식에서 제출하거나 데이터베이스 필드에서 읽은 이름의 일부일 경우에는 완벽하게 안전합니다.
중요한 것은 위험한 문자에 대한 임의 입력을 필터링할 수 없다는 것입니다. 올바른 상황에서는 어떤 문자도 위험할 수 있기 때문입니다.일부 특정 문자가 특별한 의미를 갖는 다른 하위 언어로 교차하기 때문에 위험해질 수 있는 지점에서 인코딩해야 합니다.HTML에 문자열을 쓸 때는 서버를 사용하여 HTML에 특별한 의미가 있는 문자를 인코딩해야 합니다.HtmlEncode.동적 SQL 문에 문자열을 전달하는 경우 다른 문자를 인코딩해야 합니다(또는 준비된 문 등을 사용하여 프레임워크에서 이를 수행하도록 해야 합니다).
문자열을 HTML로 전달하는 모든 곳에서 HTML 인코딩을 수행한 후 설정합니다.ValidateRequest="false"에 시대에<%@ Page ... %>의 지의시에서 ..aspx줄을 서다
더 작업이 할 수 .NET 4에서는 조금 더 많은 작업이 필요할 수 있습니다.때때로 추가할 필요가 있습니다.<httpRuntime requestValidationMode="2.0" />web.config(참조)로 이동합니다.
ASP를 사용하는 경우 이 오류에 대한 다른 해결책이 있습니다.NET MVC:
- ASP.NET MVC – validateRequest=false 페이지가 작동하지 않습니까?
- 유효성 검사 이유입력(거짓)이 작동하지 않습니까?
- ASP.NET MVCRC1, 입력, 잠재적 위험 요청 및 함정
C# 샘플:
[HttpPost, ValidateInput(false)]
public ActionResult Edit(FormCollection collection)
{
// ...
}
Visual Basic 샘플:
<AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _
Function Edit(ByVal collection As FormCollection) As ActionResult
...
End Function
ASP.NET MVC(버전 3부터)에서는 모델의 속성에 속성을 추가할 수 있습니다.
속성에 대한 요청 유효성 검사를 건너뛰어 모델 바인딩 중에 요청에 HTML 마크업을 포함할 수 있습니다.
[AllowHtml]
public string Description { get; set; }
만약에 당신이.NET 4.0을 사용하여 이 정보를 웹.config 파일의 내부에 추가해야 합니다.<system.web>매개 변수:
<httpRuntime requestValidationMode="2.0" />
2에서 요청 됩니다.NET 2.0에서는 다음에 대해서만 유효성 검사를 요청합니다.aspx요청한다..NET 4.0에서는 모든 요청을 포함하도록 확장되었습니다.처리할 때 XSS 유효성 검사만 수행하는 것으로 되돌릴 수 있습니다..aspx다음을 지정함으로써:
requestValidationMode="2.0"
다음을 지정하여 요청 유효성 검사를 모두 비활성화할 수 있습니다.
validateRequest="false"
ASP802. 40에서는 특정 사이트가 아닌 입력으로 마크업할 수 . NET 4.0이 아닌 수 .<location> 모든가 안전하다는 것을 할 수 .이렇게 하면 다른 모든 페이지가 안전합니다.당신은 필없다니습가요를 넣을 .ValidateRequest="false"aspx 페이지에 있습니다.
<configuration>
...
<location path="MyFolder/.aspx">
<system.web>
<pages validateRequest="false" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
...
</configuration>
입력으로 마크업을 허용하는 페이지를 사이트 수준에서 볼 수 있기 때문에 web.config 내에서 이 페이지를 제어하는 것이 더 안전합니다.
요청 유효성 검사가 비활성화된 페이지에서 입력의 유효성을 프로그래밍 방식으로 검사해야 합니다.
이전 답변은 훌륭하지만 HTML/JavaScript 주입에 대한 유효성 검사에서 단일 필드를 제외하는 방법에 대해서는 아무도 언급하지 않았습니다.이전 버전에 대해서는 잘 모르지만 MVC3 베타에서는 다음과 같은 작업을 수행할 수 있습니다.
[HttpPost, ValidateInput(true, Exclude = "YourFieldName")]
public virtual ActionResult Edit(int id, FormCollection collection)
{
...
}
제외된 필드를 제외한 모든 필드의 유효성을 검사합니다.좋은 점은 유효성 검사 특성이 여전히 필드의 유효성을 검사하지만 "잠재적으로 위험한 요청"을 받지 못한다는 것입니다.클라이언트 예외에서 양식 값이 탐지되었습니다.
정규 표현식의 유효성을 검사하는 데 사용했습니다.정규식이 유효한지 확인하기 위해 고유한 ValidationAttribute를 만들었습니다.정규 표현식에 스크립트와 유사한 내용이 포함될 수 있기 때문에 위의 코드를 적용했습니다. 정규 표현식이 유효한지 여부는 아직 확인 중이지만 스크립트나 HTML이 포함된 경우에는 확인되지 않습니다.
ASP.NET MVC에서 web.config에서 requestValidationMode="2.0" 및 validateRequest="false"를 설정하고 Validate를 적용해야 합니다.컨트롤러 작업에 속성 입력:
<httpRuntime requestValidationMode="2.0"/>
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
그리고.
[Post, ValidateInput(false)]
public ActionResult Edit(string message) {
...
}
텍스트 상자 내용을 HTML 인코딩할 수 있지만, 안타깝게도 예외가 발생하는 것을 막지는 못합니다.제 경험으로는 우회할 방법이 없으며, 페이지 유효성 검사를 해제해야 합니다.그렇게 함으로써 당신은 이렇게 말하는 것입니다: "조심할게요, 약속해요."
이 질문에 대한 대답은 간단합니다.
var varname = Request.Unvalidated["parameter_name"];
이렇게 하면 특정 요청에 대한 유효성 검사가 비활성화됩니다.
Global.asax에서 해당 오류를 발견할 수 있습니다.여전히 유효성을 확인하고 싶지만 적절한 메시지를 표시합니다.아래 나열된 블로그에서 이와 같은 샘플을 사용할 수 있었습니다.
void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Clear();
Response.StatusCode = 200;
Response.Write(@"[html]");
Response.End();
}
}
다른 페이지로 리디렉션하는 것도 예외에 대한 합리적인 응답인 것 같습니다.
http://www.romsteady.net/blog/2007/06/how-to-catch-httprequestvalidationexcep.html
MVC의 경우 다음을 추가하여 입력 유효성 검사를 무시합니다.
[검증]입력(거짓)]
컨트롤러의 각 작업 위에 표시됩니다.
일부는 명심하시기 바랍니다.NET 컨트롤은 출력을 자동으로 HTML 인코딩합니다.예를 들어 을 설정합니다.TextBox 컨트롤의 텍스트 속성은 자동으로 인코딩됩니다.그것은 구체적으로 변환을 의미합니다.<안으로<,>안으로>그리고.&안으로&그러니 조심해서 이런 짓을...
myTextBox.Text = Server.HtmlEncode(myStringFromDatabase); // Pseudo code
하이퍼링크, 및를 래핑합니다.하이퍼링크, 리터럴 및 레이블의 텍스트 속성은 HTML 인코딩을 수행하지 않으므로 서버를 래핑합니다. HtmlEncode()를 항목이 입니다.<script> window.location = "http://www.google.com"; </script>페이지로 출력된 후 실행됩니다.
무엇이 암호화되고 무엇이 암호화되지 않는지 알아보기 위해 약간의 실험을 수행합니다.
web.config 파일의 태그 내에 requestValidationMode="2.0" 특성을 가진 httpRuntime 요소를 삽입합니다.또한 validateRequest="false" 특성을 페이지 요소에 추가합니다.
예:
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
<pages validateRequest="false">
</pages>
</configuration>
ValidateRequest를 비활성화하지 않으려면 예외를 방지하기 위해 JavaScript 기능을 구현해야 합니다.이것은 최선의 선택은 아니지만, 효과가 있습니다.
function AlphanumericValidation(evt)
{
var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode :
((evt.which) ? evt.which : 0));
// User type Enter key
if (charCode == 13)
{
// Do something, set controls focus or do anything
return false;
}
// User can not type non alphanumeric characters
if ( (charCode < 48) ||
(charCode > 122) ||
((charCode > 57) && (charCode < 65)) ||
((charCode > 90) && (charCode < 97))
)
{
// Show a message or do something
return false;
}
}
그런 다음 PageLoad 이벤트의 코드 뒤에 다음 코드를 사용하여 컨트롤에 속성을 추가합니다.
Me.TextBox1.Attributes.Add("OnKeyPress", "return AlphanumericValidation(event);")
또 다른 솔루션은 다음과 같습니다.
protected void Application_Start()
{
...
RequestValidator.Current = new MyRequestValidator();
}
public class MyRequestValidator: RequestValidator
{
protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex)
{
bool result = base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex);
if (!result)
{
// Write your validation here
if (requestValidationSource == RequestValidationSource.Form ||
requestValidationSource == RequestValidationSource.QueryString)
return true; // Suppress error message
}
return result;
}
}
아직 아무도 아래에 대해 언급하지 않은 것 같은데, 저는 그것이 문제를 해결해 줍니다.누가 '그래, 비주얼 베이직'이라고 말하기 전에...우웩.
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Example.aspx.vb" Inherits="Example.Example" **ValidateRequest="false"** %>
단점이 있는지는 모르겠지만, 저에게 이것은 놀라운 효과가 있었습니다.
모듈에서 할 수 있다고 생각합니다. 하지만 이것은 몇 가지 의문점을 남깁니다. 입력을 데이터베이스에 저장하려면 어떻게 해야 할까요?암호화된 데이터를 데이터베이스에 저장할 때 갑자기 입력을 신뢰하게 되는데, 이는 아마도 좋지 않은 생각일 것입니다.데이터베이스에 인코딩되지 않은 원시 데이터를 저장하고 매번 인코딩하는 것이 이상적입니다.
페이지 수준별로 보호를 비활성화한 다음 매번 인코딩하는 것이 더 나은 선택사항입니다.
서버를 사용하는 것보다.HtmlEncode Microsoft ACE 팀에서 보다 완벽한 최신 Anti-XSS 라이브러리를 살펴봐야 합니다.
프레임워크 4.0을 사용하는 경우 web.config의 항목(<pages validateRequest="false" />)
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
프레임워크 4.5를 사용하는 경우 web.config의 항목(requestValidationMode="2.0")
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" requestValidationMode="2.0"/>
</system.web>
만약 당신이 한 페이지만을 원한다면, 당신은 다음과 같이 첫 번째 줄을 당신의 asx 파일에 넣어야 합니다:
<%@ Page EnableEventValidation="false" %>
와 같은 => <%@ 페이지> 이미것와있나만추머지가요다세하면 =>EnableEventValidation="false"%>
저는 그것을 하지 않는 것을 추천합니다.
ASP.NET에서 예외를 포착하여 친근한 메시지를 표시하거나 다른 페이지로 리디렉션하는 등의 작업을 수행할 수 있습니다.또한 당신이 직접 검증을 처리할 가능성도 있습니다...
친숙한 메시지 표시:
protected override void OnError(EventArgs e)
{
base.OnError(e);
var ex = Server.GetLastError().GetBaseException();
if (ex is System.Web.HttpRequestValidationException)
{
Response.Clear();
Response.Write("Invalid characters."); // Response.Write(HttpUtility.HtmlEncode(ex.Message));
Response.StatusCode = 200;
Response.End();
}
}
에서 디코딩되는 데이터를 자바스크립트로 인코딩하는 솔루션을 찾았습니다.NET(jQuery가 필요하지 않음).
- 텍스트 상자를 ASP 요소 대신 HTML 요소(예: 텍스트 영역)로 만듭니다.
- 숨겨진 필드를 추가합니다.
다음 자바스크립트 함수를 헤더에 추가합니다.
boo { target function boo() { target==.getElementById= innerText"), }, sourceText = document.getElementByIdenFieldIdocument.getText =("("), targetText"("("텍스트 }("),"텍스트 }("
텍스트 영역에 boo()를 호출하는 on변경을 포함합니다.
<textarea id="userbox" onchange="boo();"></textarea>
마지막으로.NET, 사용
string val = Server.UrlDecode(HiddenField1.Value);
나는 이것이 단방향이라는 것을 알고 있습니다. 만약 당신이 양방향이 필요하다면 당신은 창의적이어야 하지만, 만약 당신이 web.config를 편집할 수 없다면 이것은 해결책을 제공합니다.
다음은 JQuery를 통해 아이디어를 내고 사용한 예입니다.
$(document).ready(function () {
$("#txtHTML").change(function () {
var currentText = $("#txtHTML").text();
currentText = escape(currentText); // Escapes the HTML including quotations, etc
$("#hidHTML").val(currentText); // Set the hidden field
});
// Intercept the postback
$("#btnMyPostbackButton").click(function () {
$("#txtHTML").val(""); // Clear the textarea before POSTing
// If you don't clear it, it will give you
// the error due to the HTML in the textarea.
return true; // Post back
});
});
마크업:
<asp:HiddenField ID="hidHTML" runat="server" />
<textarea id="txtHTML"></textarea>
<asp:Button ID="btnMyPostbackButton" runat="server" Text="Post Form" />
이것은 아주 잘 작동합니다.해커가 JavaScript를 바이패스하여 게시하려고 하면 오류가 나타납니다.또한 데이터베이스에 인코딩된 모든 데이터를 저장한 다음 서버 측에서 데이터를 탈출시키고 다른 곳에 표시하기 전에 공격을 구문 분석하고 확인할 수 있습니다.
원인
ASP.NET은 기본적으로 XSS(사이트 간 스크립팅) 및 SQL 주입으로 이어질 수 있는 잠재적으로 안전하지 않은 콘텐츠에 대한 모든 입력 제어를 검증합니다.따라서 위의 예외를 던져 이러한 내용을 허용하지 않습니다.기본적으로 각 포스트백에서 이 검사를 수행하도록 허용하는 것이 좋습니다.
해결책
대부분의 경우 리치 텍스트 상자 또는 리치 텍스트 편집기를 통해 HTML 내용을 페이지에 제출해야 합니다.를 이경우에서이예여하정방에서 설정하여 이 할 수 .@Page거짓 지시
<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest = "false" %>
이렇게 하면 요청 유효성 검사 플래그를 false로 설정한 페이지에 대한 요청 유효성 검사가 비활성화됩니다.이것을 비활성화하려면 웹 응용 프로그램 전체를 확인하십시오. 웹.config <시스템에서 false로 설정해야 합니다.web > 섹션
<pages validateRequest ="false" />
.NET 4.0 이상 프레임워크의 경우 <시스템>에 다음 행도 추가해야 합니다.web> 섹션을 참조하십시오.
<httpRuntime requestValidationMode = "2.0" />
바로 그거야.이것이 위의 문제를 해결하는 데 도움이 되기를 바랍니다.
참조자: ASP.네트워크 오류: 잠재적으로 위험한 요청입니다.클라이언트에서 양식 값이 탐지되었습니다.
여기에 있는 다른 솔루션은 좋지만, 모든 모델 속성에 [AllowHtml]을(를) 적용해야 하는 것은 다소 번거로운 일입니다. 특히 적절한 규모의 사이트에 100개 이상의 모델이 있는 경우에는 더욱 그렇습니다.
나처럼 이 기능(IMHO 상당히 무의미함)을 오프사이트로 전환하고 싶다면 기본 컨트롤러에서 Execute() 메서드를 재정의할 수 있습니다(내가 제안하는 기본 컨트롤러가 아직 없다면 공통 기능을 적용하는 데 매우 유용할 수 있습니다).
protected override void Execute(RequestContext requestContext)
{
// Disable requestion validation (security) across the whole site
ValidateRequest = false;
base.Execute(requestContext);
}
사용자 입력에서 가져온 보기(ASP의 기본 동작)로 펌핑되는 모든 항목을 HTML 인코딩하고 있는지 확인하십시오.어쨌든 레이저가 있는 NET MVC 3, 그러니까 어떤 이상한 이유로 HTML을 사용하지 않는 한.Raw() 이 기능은 필요하지 않습니다.
다음과 같은 특수 문자가 필요한 경우 페이지 유효성 검사를 해제합니다.>, ,<그런 다음 사용자 입력이 표시될 때 데이터가 HTML로 인코딩되었는지 확인합니다.
페이지 유효성 검사에는 보안 취약성이 있으므로 무시할 수 있습니다.또한 페이지 검증에만 의존해서는 안 됩니다.
참조: http://web.archive.org/web/20080913071637/http ://www.procheckup.com:80/PDFs/bypassing-dot-NET-ValidateRequest.pdf
저도 이 오류를 받고 있었습니다.
제 경우, 사용자가 악센트 문자를 입력했습니다.á역할 이름(ASP 관련).NET 구성원 자격 공급자).
하고, "Users"는 다음과 .$.ajax우편 요청은 비참하게 실패하고 있었습니다...
저는 문제를 해결하기 위해 이렇게 했습니다.
대신에
data: { roleName: '@Model.RoleName', users: users }
수행
data: { roleName: '@Html.Raw(@Model.RoleName)', users: users }
@Html.Raw속임수를 썼습니다.
으로 역할 을 받고 .roleName="Cadastro bás" 엔티티 HTML과 이 을 사용합니다.áASP에 의해 차단되었습니다. MVC. NET MVC가 .roleName 방식:야 변 수 하 는 방 식 어 있 값 :roleName="Cadastro Básico"ASP를 사용합니다.NET MVC 엔진이 더 이상 요청을 차단하지 않습니다.
또한 JavaScript의 이스케이프(문자열) 기능을 사용하여 특수 문자를 대체할 수도 있습니다.그런 다음 서버 측에서 서버를 사용합니다.URLDecode(문자열)를 다시 전환합니다.
이렇게 하면 입력 유효성 검사를 끌 필요가 없으며 문자열에 HTML 콘텐츠가 있을 수 있다는 것이 다른 프로그래머들에게 더 분명해질 것입니다.
다음과 같은 원하지 않는 문자를 확인하기 위해 각 포스트백 전에 JavaScript를 사용하게 되었습니다.
<asp:Button runat="server" ID="saveButton" Text="Save" CssClass="saveButton" OnClientClick="return checkFields()" />
function checkFields() {
var tbs = new Array();
tbs = document.getElementsByTagName("input");
var isValid = true;
for (i=0; i<tbs.length; i++) {
if (tbs(i).type == 'text') {
if (tbs(i).value.indexOf('<') != -1 || tbs(i).value.indexOf('>') != -1) {
alert('<> symbols not allowed.');
isValid = false;
}
}
}
return isValid;
}
해당 페이지는 대부분 데이터 입력이며, 포스트백을 수행하는 요소는 거의 없지만 적어도 데이터는 보존됩니다.
다음과 같은 것을 사용할 수 있습니다.
var nvc = Request.Unvalidated().Form;
가이따.nvc["yourKey"]작동해야 합니다.
이러한 문자가 "<" 및 ">"(이중 따옴표 자체가 아님) 문자이고 <input value="this"/">와 같은 컨텍스트에서 사용하는 한 안전합니다(<text area>의 경우 당연히 취약합니다).이렇게 하면 상황이 단순해질 수 있지만, 다른 게시된 솔루션 중 하나를 더 사용할 수 있습니다.
만약 당신이 단지 당신의 사용자들에게 < 및 >가 사용되지 않을 것이라고 말하고 싶지만, 당신은 사전에 전체 양식을 처리/게시하고 모든 입력을 잃고 싶지 않다면, 단순히 필드 주변에 검증자를 배치하여 그러한 (그리고 아마도 다른 잠재적으로 위험한) 캐릭터들을 선별하지 않을 수 있습니까?
사용자 정의 모델 바인더의 HTML 필드를 자동으로 인코딩할 수 있습니다.나의 솔루션은 약간 다릅니다. 모델 상태에 오류를 입력하고 필드 근처에 오류 메시지를 표시합니다.자동 인코딩을 위해 이 코드를 쉽게 수정할 수 있습니다.
public class AppModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
try
{
return base.CreateModel(controllerContext, bindingContext, modelType);
}
catch (HttpRequestValidationException e)
{
HandleHttpRequestValidationException(bindingContext, e);
return null; // Encode here
}
}
protected override object GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext,
PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder)
{
try
{
return base.GetPropertyValue(controllerContext, bindingContext, propertyDescriptor, propertyBinder);
}
catch (HttpRequestValidationException e)
{
HandleHttpRequestValidationException(bindingContext, e);
return null; // Encode here
}
}
protected void HandleHttpRequestValidationException(ModelBindingContext bindingContext, HttpRequestValidationException ex)
{
var valueProviderCollection = bindingContext.ValueProvider as ValueProviderCollection;
if (valueProviderCollection != null)
{
ValueProviderResult valueProviderResult = valueProviderCollection.GetValue(bindingContext.ModelName, skipValidation: true);
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult);
}
string errorMessage = string.Format(CultureInfo.CurrentCulture, "{0} contains invalid symbols: <, &",
bindingContext.ModelMetadata.DisplayName);
bindingContext.ModelState.AddModelError(bindingContext.ModelName, errorMessage);
}
}
Application_Start에서:
ModelBinders.Binders.DefaultBinder = new AppModelBinder();
양식 필드에서만 사용할 수 있습니다.위험 값은 컨트롤러 모델에 전달되지 않지만 ModelState에 저장되어 있으며 오류 메시지와 함께 양식에 다시 표시될 수 있습니다.
URL의 위험한 문자는 다음과 같이 처리할 수 있습니다.
private void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
HttpContext httpContext = HttpContext.Current;
HttpException httpException = exception as HttpException;
if (httpException != null)
{
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
var httpCode = httpException.GetHttpCode();
switch (httpCode)
{
case (int)HttpStatusCode.BadRequest /* 400 */:
if (httpException.Message.Contains("Request.Path"))
{
httpContext.Response.Clear();
RequestContext requestContext = new RequestContext(new HttpContextWrapper(Context), routeData);
requestContext.RouteData.Values["action"] ="InvalidUrl";
requestContext.RouteData.Values["controller"] ="Error";
IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
IController controller = factory.CreateController(requestContext, "Error");
controller.Execute(requestContext);
httpContext.Server.ClearError();
Response.StatusCode = (int)HttpStatusCode.BadRequest /* 400 */;
}
break;
}
}
}
오류 컨트롤러:
public class ErrorController : Controller
{
public ActionResult InvalidUrl()
{
return View();
}
}
언급URL : https://stackoverflow.com/questions/81991/a-potentially-dangerous-request-form-value-was-detected-from-the-client
'programing' 카테고리의 다른 글
| Xcode9 iOS11 앱 릴리스에 CFBundleIconName 누락 (0) | 2023.05.14 |
|---|---|
| INI 파일 읽기/쓰기 (0) | 2023.05.14 |
| Azure 서브스크립션 ID, AAD 테넌트 ID 및 AAD App Client ID가 비밀/PII로 간주됩니까? (0) | 2023.05.14 |
| Mongoose/MongoDB 결과 필드가 Javascript에서 정의되지 않은 것으로 나타납니다. (0) | 2023.05.14 |
| 내부 사용자에게 TestFlight 초대 이메일이 전송되지 않음 (0) | 2023.05.14 |