2008-09-19 3 views
3

개발 환경에서 정상적으로 작동하지만 프로덕션 환경에서 포스트 백을 수행하는 링크를 클릭하면 다음 예외가 throw됩니다. 어떤 아이디어?유효하지 않은 포스트 백 또는 콜백 인수

잘못된 포스트 백 또는 콜백 인수. 구성에서 이벤트 유효성 검사를 사용하거나 페이지에서 < % @ Page EnableEventValidation = "true"%>를 사용하여 이벤트 유효성 검사를 사용하도록 설정합니다. 보안상의 이유로이 기능은 포스트 백 또는 콜백 이벤트에 대한 인수가 원래 렌더링 된 서버 컨트롤에서 으로 시작되는지 확인합니다. 데이터가 유효하고 예상되는 경우 유효성 확인을위한 포스트 백 또는 콜백 데이터를 등록하려면 ClientScriptManager.RegisterForEventValidation 메서드를 사용하십시오.

편집 : 이것은, 어떤 아이디어가 IE6로 볼 수 있지만 IE7과 경우에만 발생하는 것으로 보인다?

+0

페이지에서 ASP.Net AJAX를 사용하고 있습니까? – JasonS

+0

예 ASP.NET AJAX를 사용하고 있습니다. – jwarzech

답변

0

포스트 백이 발생할 때 페이지의 데이터/컨트롤이 변경된 것 같습니다. 페이지 지시문에서 이벤트 유효성 검사를 해제하면 어떻게됩니까?

<%@ Page ... EnableEventValidation = "false" /> 
+0

다른 작업에 의존하여 유효성 검사를 끌 수 없습니다. – jwarzech

1

이것은 악의적 인 것으로 보이는 항목을 게시하는 경우에 발생할 수 있습니다. html이 들어 있지만 다시 게시하기 전에 인코딩되지 않은 텍스트 상자와 같이. HTML 또는 스크립트 제출을 허용하는 경우 <과 같은 문자가 & lt;으로 전달되도록 인코딩해야합니다.

0

내 페이지에 <form> 태그가 중첩되어있는 경우에만이 기능을 사용할 수 있습니다. IE6는 중첩 된 양식 태그를보고 양식과 기본 ASP.NET 양식에 값을 게시하여 오류의 원인이됩니다. 다른 브라우저는 중첩 된 양식을 게시하지 않으며 (잘못된 HTML이기 때문에) 오류가 발생하지 않습니다.

확실하게 을 수행하여이 문제를 해결할 수 있지만 게시 된 값 및 viewstate에 문제가있을 수 있습니다. 먼저 중첩 된 <form> 태그를 제거하는 것이 좋습니다.

양식 필드의 HTML-esque 값과 같은 다른 부분이 있지만 여기에 대한 오류 메시지가 더 구체적이라고 생각합니다. 이것을 던지는 일반적인 포스트 백에서 렌더링 된 페이지에서 여분의 <form> 태그를 확인합니다.

1

문제 설명 : 이것은 많은 ASP.NET 초보자가 직면하고 게시하고 묻는 공통된 문제 중 하나입니다. 일반적으로 다음과 같이 오류 메시지를 게시하고 수행하려고 시도한 내용에 대해 많이 공유하지 않고 해결 방법을 찾습니다.

[ArgumentException : 잘못된 포스트 백 또는 콜백 인수입니다. 이벤트 유효성 검사는 구성 또는 < % @ Page EnableEventValidation = "true"%>를 사용하여 활성화됩니다. 보안상의 이유로이 기능은 포스트 백 또는 콜백 이벤트에 대한 인수가 원래 렌더링 된 서버 컨트롤에서 비롯된 것인지 확인합니다. 데이터가 유효하고 예상되는 경우 유효성 검사를 위해 다시 게시 또는 콜백 데이터를 등록하려면 ClientScriptManager.RegisterForEventValidation 메서드를 사용합니다.]

오류 스택 추적 자체는 이벤트 유효성 검사를 해제하여 빠른 해결 방법을 제안하지만 보안 구멍을 열 때 권장되는 솔루션은 아닙니다. 왜 그런 일이 발생했는지, 그리고 그 근본 문제를 해결하고 처리하는 방법을 알고있는 것이 좋습니다.

평가 : 이벤트 원본은 이벤트의 원본이 관련 렌더링 된 컨트롤인지 (일부 크로스 사이트 스크립트가 아닌) 유효성을 검사하기 위해 수행됩니다. 컨트롤은 렌더링 중에 이벤트를 등록하기 때문에 포스트 백 또는 콜백 중에 (__doPostBack의 인수를 통해) 이벤트를 확인할 수 있습니다. 이렇게하면 권한이 없거나 악의적 인 포스트 백 요청 및 콜백의 위험이 줄어 듭니다.

참조 : MSDN : Page.EnableEventValidation 재산권

상기 내용을 토대로, 내가 직면 또는 토론에서 문제를 제기하는 들었다 가능한 시나리오는 다음과 같습니다 사례 # 1 : 우리가 요청 데이터의 각 괄호가있는 경우 , 일부 스크립트 태그가 서버로 전달되는 것처럼 보입니다.

가능한 해결 방법 : HTML은 ">"

function HTMLEncodeAngularBrackets(someString) 
{ 
var modifiedString = someString.replace("<","&lt;"); 
modifiedString = modifiedString.replace(">","&gt;"); 
return modifiedString; 
} 

사례 # 2 "<"와 ">"와 "<"을 대체, 즉, 양식을 제출하기 전에 자바 스크립트의 도움으로 각 브래킷을 인코딩 : 런타임에 클라이언트에서 컨트롤을 변경하는 클라이언트 스크립트를 작성하면 매달리는 이벤트가 발생할 수 있습니다. 내부 컨트롤이 포스트 백을 위해 등록하지만 외부 컨트롤에서 수행되는 작업으로 인해 런타임시 숨겨지는 예제가 포함 된 컨트롤을 가질 수 있습니다. Carlo가 쓴 MSDN 블로그에서 여러 가지 양식 태그 때문에 같은 문제를 찾을 때 읽었습니다.

가능한 해결 방법 : 페이지의 Render 메서드 내에서 이벤트 유효성 검사를위한 컨트롤을 수동으로 등록하십시오.

protected override void Render(HtmlTextWriter writer) 
{ 
ClientScript.RegisterForEventValidation(myButton.UniqueID.ToString()); 
base.Render(writer); 
} 

으로합니다 (이 같은 범주에 폭포 모양)보고 다른 일반적인 시나리오 중 하나가 하나 개의 양식 태그는 서버에서 실행되는 또 다른 형태의 태그에 포함 된 페이지를 구축했다. 그 중 하나를 제거하면 플로우가 정정되고 문제점을 해결합니다.

사례 3 : 모든 포스트 백에서 런타임에 컨트롤 또는 명령을 재정의하거나 인스턴스화하면 해당/관련 이벤트가 토스로 갈 수 있습니다. 간단한 예제는 모든 페이지로드 (포스트 백 포함)에서 DataGrid를 다시 바인딩하는 것입니다. 다시 바인딩 할 때 그리드의 모든 컨트롤에 데이터 ID 컨트롤이 트리거 된 이벤트가 발생하면 포스트 백에서 컨트롤 ID가 변경되므로 이벤트가 올바른 컨트롤에 연결되지 않아 문제가 발생하지 않을 수 있습니다.

가능한 해결 방법 : 이 작업은 컨트롤이 모든 포스트 백 (여기에서 다시 바인딩)에서 다시 만들어지지 않도록 간단하게 해결할 수 있습니다. Page 속성 IsPostback을 사용하면 쉽게 처리 할 수 ​​있습니다. 모든 포스트 백에 대한 컨트롤을 만들려면 ID가 변경되지 않았는지 확인해야합니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
if(!Page.IsPostback) 
{ 
// Create controls 
// Bind Grid 
} 
} 

결론 : 으로 쉬운/직접 솔루션은 Page 지시문 또는 Web.config 파일에 enableEventValidation이 = "false"를 추가 할 수 있지만 사용하지 않는 것이 좋습니다 말했다. 구현 및 원인을 기반으로 근본 원인을 찾아 적절하게 해결하십시오.

0

필자는 수동으로 텍스트를 입력 할 때 ListBox가 정상적으로 작동하는 곳에서 비슷한 일이 발생했지만 SQL 쿼리를 기반으로 데이터를 입력하면 목록의 마지막 항목이이 예외를 throw합니다.나는 모든 Q & A를 찾았고 내 문제와 일치하는 것은 아무것도 없었다.

필자의 경우 SQL 데이터에 인쇄 할 수없는 문자 (\ r)가있는 것이 문제였습니다. 서버가 인쇄 할 수없는 문자의 존재를 기반으로 해시 코드를 만들었지 만 실제로 ListBox에 표시된 문자열에서 제거되어 2 번째 해시가 1 번째와 일치하지 않습니다. 문자열을 정리하고 인쇄 할 수없는 문자를 ListBox에 넣기 전에 제거하면 내 문제가 해결되었습니다.

이것은 아마도 최고급 사례 일 것이지만이 기사를 완성하기 위해 추가하고 싶습니다. (다른 사람들이 2 일간 미친 듯이 보내지 않기를 바랍니다.)

관련 문제