2011-03-26 10 views
8

내 MVC3 사이트에서 requestValidationMode = "2.0"을 새 ValidateInput 특성으로 설정하는 것을 피했지만 지금은 인증을 위해 WIF로 전환하려고 시도하고 있으며 STS가 리디렉션 할 때 내 사이트로 돌아가서 WSFederationAuthenticationModule.IsSignInResponseRequest.Unvalidated().Form 대신 Request.Form을 호출하기 때문에 예외가 발생합니다 ... requestValidationMode = "2.0"(이 작업을 수행하고 싶지 않습니다)로 가지 않고이 문제를 해결할 수있는 방법이 있습니까?WSFederationAuthenticationModule.IsSignInResponse의 잠재적 인 Request.Form

다음은 스택 추적이므로, 내 뜻을 알 수 있습니다. 내 컨트롤러의 메소드는 실제로 호출되지 않습니다.

[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (wresult="<trust:RequestSecuri...").] 
    System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +8755668 
    System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +122 
    System.Web.HttpRequest.get_Form() +114 
    Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.IsSignInResponse(HttpRequest request) +21 
    Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.CanReadSignInResponse(HttpRequest request, Boolean onPage) +121 
    Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +78 
    System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

답변

12

이 다루는 올바른 방법은 특정 추가하는 것입니다 유효성 검사기를 HttpRuntime에 연결하면 유효한 보안 토큰을 감지하는 방법을 알 수 있습니다. 여기 예제의에서

봐 : 여기

namespace FShipping 
{ 
    using System; 
    using System.Web; 
    using System.Web.Util; 
    using Microsoft.IdentityModel.Protocols.WSFederation; 

    public class WsFederationRequestValidator : RequestValidator 
    { 
     protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex) 
     { 
      validationFailureIndex = 0; 
      if (requestValidationSource == RequestValidationSource.Form && 
       collectionKey.Equals(WSFederationConstants.Parameters.Result, StringComparison.Ordinal)) 
      { 
       if (WSFederationMessage.CreateFromFormPost(context.Request) as SignInResponseMessage != null) 
       { 
        return true; 
       } 
      } 

      return base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex); 
     } 
    } 
} 

는 설정이다 : 여기 http://claimsid.codeplex.com/releases/view/62929

는 (도 5 t 구체적으로 샘플 # MVC 응용 프로그램) 그 중 하나에서 발췌 한 것입니다 :

<system.web> 
... 
    <httpRuntime requestValidationType="FShipping.WsFederationRequestValidator" /> 
</system.web> 
+1

@Euginio : 그 정보가 [Claims Identity Guide] 책 (http://claimsid.codeplex.com/releases/view/50000)의 [2010 년 8 월 2 일] 릴리스에 분명히 추가되었습니다. 이것은 곧 공식 문서가 될 것인가? [MSDN] (http://www.google.com/search?q=%2BWIF+%2BRequestValidator+site%3Amsdn.microsoft.com+-site%3Asocial.msdn.microsoft.com) 및 [TechNet] (http : // www.google.com/search?q=%2BWIF+%2BRequestValidator+site%3Atechnet.microsoft.com+-site%3Asocial.technet.microsoft.com)에는이 내용이 전혀 언급되어 있지 않습니다. WIF 알려진 문제점 페이지의 업데이트가 최소한 순서대로 표시됩니다. –

+0

이것은 유효성 검사를 2.0으로 설정하고 Global.asax.cs Application_BeginRequest에서 해당 코드 조각과 비슷한 코드를 사용하여 로그온 포스트 백을 제외한 모든 경우에 Request.ValidateInput()을 호출하는 것보다 훨씬 깨끗한 솔루션처럼 보입니다. . – Jaykul

+0

그리고 작동합니다 ;-) – Jaykul

2

우리는 어떤 점에서이 같은 오류를 관찰 생각하지만, 내가 정확히 기억한다면 그 어떤 실험 또는 테스트 비계 코드에서, 그래서 우리가 엄격한 보안 요구 사항이 없었다.

내가 알 수있는 공식 정보는 WIF의 알려진 문제입니다. the WIF Known Issues page의 시작 부분에 "ASP.NET에서 잠재적 인 보안 공격으로 수동 페더레이션 토큰을 검색합니다"절을 참조하십시오. 그들은 validateRequest="false"web.config에 설정하거나 페이지 레벨에서 이와 동일한 ASP.NET Page 지시문을 설정합니다.

응용 프로그램의 '홈 페이지'에있는 Page 지시어로만 설정할 수 있습니다. 잘 모르겠지만 작동 할 수 있습니다.

가 알려진 문제 페이지 WIF에 대한 requestValidationMode="2.0"을 얘기하지 마십시오,하지만이 추가 설정은 ASP.NET 4에 필요한 this TechNet wiki page에서 판단

+0

이봐, 알려진 문제에 대한 링크 주셔서 감사합니다 - 그것은 WIF의 단지 MVC3에 적응하지 및 Validation.Unvalidated http://msdn.microsoft.com/en-에 대한 액세스 권한을 가지고 있지 않은 것 같습니다 우리/도서관 /system.web.helpers.validation.unvalidated%28v=vs.99%29.aspx (아무도 실제로 나에게 해결 방법을 줄 수 없다면 이것을 답으로 표시 하겠지만, 매우 슬프다). – Jaykul

관련 문제