2

onrequeststart()에있는 "금지 된"/ "승인되지 않은"요청을 프로그래밍 방식으로 처리하는 ColdFusion 웹 사이트가 로그인 한 사용자의 속성에 따라 Application.cfc에 있습니다. 예를 들어 (참고 : SESSION.UseronSessionStart() 초기화합니다 :금지 된 페이지가 항상 403 코드로 응답해야합니까?

<cffunction name="onRequestStart" returnType="Boolean" output="false"> 
    <cfargument name="targetPage" type="string" required="true"> 

    <cfparam name="REQUEST.MinSecurityLevel" default="0" /> 
    <cfparam name="REQUEST.IsLoginRequired" default="false" /> 

    <cfif REQUEST.IsLoginRequired AND NOT SESSION.User.isLoggedIn()> 
     <cfscript> 
      SESSION.LoginMessage = 
       "Your session has timed out. Please log in again."; 
      SESSION.LastPageVisited = 
       getPageContext().getRequest().getRequestURI(); 

      if (Len(Trim(getPageContext().getRequest().getQueryString()))) 
       SESSION.LastPageVisited = 
         SESSION.LastPageVisited 
        & "?" 
        & getPageContext().getRequest().getQueryString(); 
     </cfscript> 

     <cflocation url="/user/login/" addtoken="false" /> 
    <cfelseif SESSION.User.getSecurityLevel() LT REQUEST.MinSecurityLevel> 
     <cfheader statuscode="403" statustext="Forbidden" /> 
    </cfif> 

    <cfreturn true /> 
</cffunction> 

는 IIS (버전 7)에서, 내가 유형과 오류 페이지 설정 "URL을 실행"내 사용자 지정 403 페이지의 경로가

내가. 수이 트리거, 그리고 제대로 내 사용자 지정 403 페이지를 표시하지만, 그것은 HTTP 응답 코드를 반환하는 200

이 반환되지해야 403?

+0

난 당신이 요구하는 것에 대한 혼란 스러워요가. 제목은 특정 상황에서 403 코드를 반환해야하는지 묻고 있지만 403 코드를 다시 보내려고 시도했지만 실제로 200 코드가 반환되는 문제를 지적하는 것 같습니다. 당신은 명확히 할 수 있습니까? 후자의 경우 ColdFusion에서 처리하는 404 코드와 동일한 문제가 있습니다. –

+0

앞으로 모든 처리를 중단하기 위해 cfheader 바로 다음에 cfabort를 사용 하시겠습니까? 나는 당신이 403을 돌려받는 것을 보증 할 것이라고 생각합니다. –

+0

@RandyJohnson CFABORT를 추가하면 동일한 결과가 나타납니다. 그래도 고마워. –

답변

0

내 응답에 해결책을 발견 그것은 비록 보인다 위의 @ Miguel-F에게. 나는 간단히 모방한다.

/missing-template/index.cfm :

<cfheader statuscode="404" statustext="Not Found" /> 

/not-authorized/index.cfm :

<cfheader statuscode="403" statustext="Forbidden" /> 
내가 404 오류를 처리하기 위해 뭘하는지의 KED 부분

403 처리기 페이지에 403 헤더를 추가하면 무한 루프가 발생한다고 생각했지만 제대로 작동합니다.

403가 트리거되면 추가 처리를 위해 필요가 없기 때문에 나는 또한 onRequestStart()에 추가 :

<cfelseif SESSION.User.getSecurityLevel() LT REQUEST.MinSecurityLevel> 
    <cfheader statuscode="403" statustext="Forbidden" /> 

    <cfreturn false /> 
</cfif> 
+0

정말 기쁩니다! 다른 질문에 답하기 위해 사용자 인증이 필요한 페이지의 경우 일반적으로 401 Unauthorized를 반환합니다.w3.org - ** 401 **에서이 설명을 읽으십시오. 요청에 사용자 인증이 필요합니다. 응답은 요청 된 자원에 적용 가능한 챌린지를 포함하는 WWW-Authenticate 헤더 필드를 반드시 포함해야한다. 클라이언트는 적절한 Authorization 헤더 필드를 사용하여 요청을 반복 할 수 있습니다 ._ ** 403 ** _ 서버가 요청을 이해했지만이를 이행하기를 거부합니다. 승인이 도움이되지 않으며 요청을 반복해서는 안됩니다 ._ –