2012-08-31 3 views
2

나는 Microsoft 시험을 준비하고 있으며 몇 가지 샘플 질문을하고 있습니다. 나는이 질문이 :Asp.Net 권한 부여 규칙 우선 순위

"당신은 회원 및 역할 공급자를 사용하도록 구성된 ASP.NET 웹 응용 프로그램을 개발하고

당신은 모든 사용자가 HTTP GET 만 허용해야합니다 단지를 수행 할 수 있도록해야합니다. 사용자가 Moderator라는 이름의 POST 작업을 수행합니다. 어떤 구성을 web.config 파일에 추가해야합니까? "

<authorization> 
    <deny verbs="POST" users="*" /> 
    <allow verbs="POST" users="Moderator" /> 
    <allow verbs="GET" users="*" /> 
</authorization> 

<authorization> 
    <allow verbs="GET" users="*" /> 
    <allow verbs="POST" users="Moderator" /> 
    <deny verbs="POST" users="*" /> 
</authorization> 

두 가지 답변이 있지만 분명히 잘못되어 있으므로 여기에 복제하지 않았습니다.

두 규칙 집합 사이에 위치 할 수있는 유일한 차이점은 규칙이 배치되는 순서입니다.

정답은 두 번째 규칙 집합입니다. 이 규칙은 먼저 "중재자"에 대한 POST 액세스를 허용 한 다음 다른 사람들을 위해 제거합니다. 이는 1 인에게 특권을 부여한 다음 모든 사람으로부터 그 특권을 제거하지만 나중에 1 인은 여전히 ​​특권을가집니다.

첫 번째 규칙 집합이 더 의미가있는 경우 - 먼저 모든 사람을 거부 한 다음 개인에게 선택적으로 액세스 권한을 부여하십시오. 분명히 이것은 잘못된 것입니다!

아무도 설명 할 수 없으므로이 점을 이해할 수 있습니까?

답변

4

이것은 처음으로 처음 제공된 첫 번째 사례입니다. ASP.NET은 일치하는 규칙을 순서대로 처리하므로 첫 번째 시나리오에서는 에 대한 deny 규칙에 맞춰 전에 allow에 도달합니다.

첫 번째 규칙 집합이 더 의미가있는 경우 - 우선 모든 사람을 거부 한 다음 개인에게 선택적으로 액세스 권한을 부여하십시오.

어떻게 작동하는지는 잘 모르겠습니다.

  1. 모두에서 모든 POST 요청을 거부 : 규칙은 따라서 무엇 첫번째 규칙은 기본적으로 말하고있는 것은, 요청 당 을 검사합니다.
  2. 중재자에 대한 POST 개의 요청을 허용합니다.
  3. 모두에게 GET 개의 요청을 허용합니다.

이 순서대로 모두. 문제는 중재자가 POST 요청으로 전송할 때 첫 번째 규칙과 일치하므로 (모두) 거부됩니다. 그러나 두 번째 시나리오는 다음과 같습니다.

  1. 모두에게 GET 요청을 허용합니다.
  2. 중재자에 대한 POST 개의 요청을 허용합니다.
  3. 모두에게 POST 개의 요청을 거부합니다.

따라서 중재자가 Post 요청을 보내면 두 번째 규칙과 일치하며 요청을 계속할 수 있습니다. 다른 사람이 POST 요청으로 전송하면 제 3 규칙에 부합하여 거부됩니다.

+0

고맙습니다. 선착순 인 경우입니다. Asp.Net은 "중재자 허용"을 먼저 찾았고 일치하기 때문에 나머지는 무시할 수 있습니다. –

+0

붐. 이것은 내가 필요한 것입니다. +1. – dstepan

1

규칙은 순서대로 평가되며 현재 "특성 집합"(= 요청 유형, 사용자가 인증되었는지 여부, 사용자 역할 등)과 일치하는 첫 번째 규칙이 사용됩니다. MSDN에서 : 첫 번째 일치가 발견 될 때까지

응용 프로그램에 대한 병합 된 규칙의 집합을 감안할 때, ASP.NET 목록 및 검사 규칙의 머리에서 시작한다. ASP.NET의 기본 구성에는 모든 사용자를 인증하는 요소가 포함되어 있습니다. 이 규칙은 기본적으로 에 적용됩니다. 다른 인증 규칙이 일치하지 않으면 요청이 허용됩니다. 일치 항목이 있고 일치 항목이 거부 요소 인 경우 요청은 이며 401 HTTP 상태 코드가 반환됩니다. allow 요소가 일치하면 모듈에서 요청을 더 처리 할 수 ​​있습니다.