2009-04-08 2 views
1

ClientScriptManager.RegisterForEventValidation을 사용하여 ClientScriptManager.RegisterHiddenField와 함께 추가 할 숨겨진 필드와 값을 등록하려고합니다. 렌더링 이벤트 중에이 작업을 수행합니다. 오류는 발생하지 않지만 ASP.NET 2.0은 필드의 유효성을 검사하지 않습니다. 값을 변경하거나 Firefox 및 Firebug를 사용하여 클라이언트 측 전체 필드를 삭제할 수 있으며 ASP.NET은 오류가 발생하지 않도록해야합니다. 사용자 정의 페이지 클래스ClientScriptManager.RegisterForEventValidation with HiddenField

샘플 코드 :

protected override void Render(HtmlTextWriter writer) 
{ 
    ClientScript.RegisterHiddenField("stuff", "things"); 
    ClientScript.RegisterForEventValidation("stuff", "things"); 
    base.Render(writer); 
} 

숨겨진 필드가 페이지에 추가되지만 ASP.NET은 다시 게시에 필드 또는 값을 확인하지 않습니다. 내가 뭘 놓치고 있니?

답변

2

당신이하려는 일을 이해하고 있지만 이벤트 유효성 검사 API를 사용하는 것은 클라이언트가 발생시킨 포스트 백 또는 콜백 이벤트가 대상 서버 컨트롤에 맞는지 확인하기위한 것이기 때문에 실제로는 적절하지 않습니다. 올바른 버튼으로 클릭이 처리되는지 또는 드롭 다운 목록의 변경 이벤트가 원래 서버에 알려지지 않은 값이 아닌지 확인하십시오.

코드에서 숨겨진 필드를 클라이언트에 직접 생성하므로 서버가 다시 게시를 참조 할 수 없습니다. 서버 페이지에서 숨겨진 필드 컨트롤을 사용한 경우에도 컨트롤이 포스트 백 이벤트를 생성하지 않기 때문에 필드 값의 유효성을 검사 할 수 없습니다 (사용자가 해당 이벤트와 상호 작용할 수있는 방법이 없기 때문에 유효성을 검사 할 서버 이벤트).

가장 간단한 해결책은 ViewState를 사용하여 필드 값을 저장 한 다음 다시 게시 할 때 필드의 게시 된 값이 ViewState에 저장된 값과 같은지 확인하는 것입니다. ViewState는 기본적으로 암호화되므로 클라이언트에서 변경하면 안되는 데이터를 안전하게 저장할 수 있습니다.

+0

이 문제를 해결해 주셔서 감사합니다. 이번에는 viewstate를 사용할 수 없습니다. 페이지 상태를 클라이언트에 보내는 대신 데이터베이스에 저장하기 때문에이 숨겨진 값은 페이지 상태의 GUID입니다. 이 기능을 보호하기 위해 가능한 모든 것을 다하고 있는지 확인하고있었습니다. –

관련 문제