SharePoint 2010의 "이 페이지에 대한 보안 유효성 검사가 잘못되었습니다." 메시지
최초 문서 게시일: 2011년 9월 15일 목요일
대부분의 사용자는 "이 페이지에 대한 보안 유효성 검사가 잘못되었습니다. 웹 브라우저에서 [뒤로] 단추를 클릭하고 페이지를 새로 고친 다음 작업을 다시 시도하십시오."라는 예외를 경험해 보았을 것입니다. 이 예외는 매우 자주 발생하는 항목 중 하나인데요. 목록에 항목을 추가하려고 하면 발생하는 경우가 많습니다(보통 RunWithElevatedPrivileges 대리인을 사용하는 경우). 이와 관련된 공통적인 문제와 공통적인 해결 방법은 다음과 같습니다.
- 공통 문제 - RunWithElevatedPrivileges를 사용할 때 기존 SPSite 또는 SPWeb 컨텍스트를 사용하는 경우. 기존 SPsite 또는 SPWeb 컨텍스트에서는 이후에 호출하는 RunWithElevatedPrivileges의 권한을 사용할 수 없습니다.
- 공통 해결 방법 - SPWeb에 대해 AllowUnsafeUpdates 속성을 true로 설정하고 항목을 목록에 추가한 후에 속성을 다시 false로 설정합니다. 이 방법으로 문제를 해결할 수는 있지만 완벽한 것은 아닙니다.
얼마 전에 _layout 디렉터리에 대해 사용자 지정 페이지를 사용하던 중에 코드 숨김에서 목록 항목을 추가하는 유사한 상황에서 다소 드물지만 보다 확실한 해결 방법을 찾아냈습니다. 이 문제는 FormDigest 컨트롤이 추가되었던 SharePoint 2003 시절부터 너무나 많이 보아 왔던 것이므로 약 2분만에 바로 해결할 수 있었습니다. 그런데 뭔가 다른 방법이 없을까 하는 생각이 들어서 대체할 수 있는 방법을 모색하게 되었고, 그 방법을 찾아낼 수 있었습니다.
제가 찾은 해결 방법은 RunWithElevatedPrivileges 코드를 시작하기 직전에 SPUtility.ValidateFormDigest()를 호출하는 것입니다. 그러면 스택에 폼 유효성 검사 코드가 생성되며 추가 작업을 정상적으로 계속할 수 있습니다. 제 경우에는 페이지가 LayoutPageBase에서 상속되었으며, aspx 태그는 다른 _layouts 페이지와 같은 방식으로 구성되었기 때문에 이미 <form> 요소와 <FormDigest> 컨트롤 인스턴스가 포함된 마스터 페이지를 사용했습니다. 페이지 또는 마스터에 이러한 요소가 없는 경우에는 추가해야 합니다. AllowUnsafeUpdates 코드가 더 이상 필요하지 않으므로 전체 페이지와 프로세스가 훨씬 안전해집니다. 다음 번에 비슷한 상황이 발생하면 이 방식을 사용해 보시기 바랍니다.
이 문서는 번역된 블로그 게시물입니다. 원본 문서는 A New Twist on an Old Friend - "The security validation for this page is invalid" - in SharePoint 2010을 참조하십시오.