2013-10-16 1 views
0

클래스에 등록한 학생의 "사진 목록"을 표시하는 웹 응용 프로그램을 상속했습니다. 이러한 이미지는 다양한 규정에 따라 보호되므로 로스터는 수업 강사에게만 제공됩니다. 이미지는 SQL Server 데이터베이스에 이진 데이터로 저장됩니다.데이터베이스의 이미지를 표시합니다 (보안 페이지를 통해 요청이있는 경우에만)

원본 디자인에서 이미지는 학생 ID 값을 기반으로 이미지를 반환하는 웹 처리기 파일 (.ashx)을 통해 제공됩니다. 명단 페이지는 자신에게 적합한 과정을 선택하도록 제한하여 이미지를 보호합니다.

이제 일부 관리자는 URL을 수정하여 웹 핸들러 파일을 직접 호출하는 방법을 배웠습니다. 이 문제를 방지하고 대신 비즈니스 규칙을 기반으로 액세스를 제한하는 다른 보호 된 페이지를 통해 관리자를 보냅니다.

관리되는 페이지에 포함 된 요청에만 응답하도록 웹 처리기/웹 서비스를 잠그기위한 옵션에는 어떤 것이 있습니까? 어떻게 사용자가 핸들러를 직접 호출하지 못하도록 할 수 있습니까?

답변

0

이와 같이 핸들러에서 인증/권한 부여 로직을 수행 할 수 있습니다.

예를 들어, 다음 코드는 사용자가 로그인하지 않은 경우 404 오류를 표시합니다.

public class ImageHandler : IHttpHandler, IRequiresSessionState 
{ 
    // 1x1 transparent GIF 
    private readonly byte[] GifData = 
    { 
     0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 
     0x01, 0x00, 0x01, 0x00, 0x80, 0xff, 
     0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 
     0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 
     0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 
     0x02, 0x44, 0x01, 0x00, 0x3b 
    }; 

    public void ProcessRequest(HttpContext context) 
    { 
     //if (context.User.IsInRole("Administrators")) 
     if (context.User.Identity.IsAuthenticated) 
     { 
      context.Response.ContentType = "image/gif"; 
      context.Response.Buffer = false; 
      context.Response.OutputStream.Write(GifData, 0, GifData.Length); 
     } 
     else 
     { 
      context.Response.Write("File not found."); 
      context.Response.StatusCode = 404; 
     } 
    } 

    public bool IsReusable 
    { 
     get { return false; } 
    } 
} 
+0

응답의 경우 Thx. 이미 IIS를 통해 Windows 인증을 시행하고 있습니다. 문제는 인증에 사용자와 코스 정보의 특정 쌍이 필요하다는 것입니다. 나는 핸들러에서 추가적인 권한 쿼리를 할 수 있다고 생각하지만, 이것은 많은 추가 작업처럼 보입니다. 양식을 통해 요청이 왔는지 확인하기 만하면됩니다. – Bill

관련 문제