LightSwitch의 보안 고려 사항
대부분의 비즈니스 응용 프로그램에는 보안 요구 사항이 있습니다.예를 들어, 응용 프로그램 또는 응용 프로그램의 화면에 액세스할 수 있는 직원을 제한하고, 특정 데이터를 보거나 업데이트할 수 있는 사용자를 제한할 수 있습니다.LightSwitch에서는 응용 프로그램에 보안을 구현하는 데 유용한 인증 및 권한 부여 모델을 기본 제공합니다.
인증 및 권한 부여
인증은 사용자를 확인하는 메커니즘입니다.예를 들어, Windows에 로그온 할 때 사용자 이름 및 암호를 통해 그 사람이 진짜인지 인증합니다.권한 부여는 어떤 일을 할 수 있고 없고를 정의하는 메커니즘입니다.예를 들어, 직원은 자신의 급여 정보를 볼 수 있지만 자신의 급여를 올리는 권한은 부여 받지 못합니다.
LightSwitch에서 인증은 사용자를 식별하는 데 사용되는 로그온 화면에 의해 처리됩니다.일단 사용자가 인증을 받으면 역할 및 권한이 사용자가 응용 프로그램에서 할 수 있는 권한을 결정합니다.
인증 사용
LightSwitch 인증은 기본적으로 사용할 수 없게 되어 있습니다. 응용 프로그램 디자이너의 액세스 제어 탭에서 사용을 설정할 수 있습니다.Windows 인증 및 폼 인증이 모두 지원됩니다.Windows 인증은 사용자의 Windows 로그온 정보를 사용해서 사용자를 식별합니다.응용 프로그램 관리자는 폼 인증을 사용하여 사용자 ID와 암호를 만듭니다.
Windows 인증을 선택할 때 특정 사용자 또는 모든 Windows 사용자가 응용 프로그램에 액세스할 것인지 여부를 선택할 수 있습니다.모든 사용자를 선택하면 유효한 Windows 로그온 ID를 갖고 있는 사용자는 모두 응용 프로그램에 액세스할 수 있지만 최소 권한만 부여됩니다.필요한 경우 개별 사용자에게 규칙 및 권한을 할당할 수 있습니다.
사용 권한, 사용자 및 역할
LightSwitch에서 권한 부여는 사용 권한, 사용자 및 역할을 정의하여 수행됩니다.사용 권한은 응용 프로그램 디자이너의 액세스 제어 탭에서 개발자가 만들고, 그 권한은 코드를 작성하여 설계됩니다.예를 들어, 사용자에게 판매 화면을 볼 수 있는 권한을 부여하기 위해 ViewSales 사용 권한을 만들 수 있습니다.화면에 대한 CanView 메서드에서 현재 사용자가 보기 권한을 부여 받은 경우 화면만 표시되도록 하는 코드를 쓸 수 있습니다.화면을 보기 위한 사용 권한을 설정하는 것 외에 화면에서 개별 컨트롤, 데이터 엔터티, 엔터티 필드, 쿼리 등에 대한 액세스를 제한하도록 권한을 만들 수 있습니다.
역할은 응용 프로그램을 배포한 후 응용 프로그램 관리자가 생성합니다.역할에는 하나 이상의 권한이 포함됩니다.예를 들어, 관리자는 판매 역할을 정의하고 이 역할에 ViewSales 권한을 할당할 수 있습니다.응용 프로그램 관리자는 또한 사용자를 추가하고 사용자에게 역할을 할당합니다.예를 들어, Bob이 영업 부서에 있는 경우 관리자가 그의 인증 정보를 추가해서 Bob을 사용자로 추가하고 판매 역할에 할당할 수 있습니다.응용 프로그램을 실행할 때 코드는 Bob의 사용자 정보를 평가하고 그 사람이 판매 역할 멤버인지 확인하고 판매 화면을 표시할 메뉴 항목을 표시합니다.
모든 응용 프로그램에는 기본 사용 권한인 SecurityAdministration 권한이 있습니다.이 사용 권한은 응용 프로그램 관리자가 사용하는 사용자 및 역할 관리 화면에 액세스를 부여합니다.처음으로 응용 프로그램을 게시하면 기본 응용 프로그램 관리자가 될 사람에 대한 인증 정보를 제공할 수 있습니다.응용 프로그램을 처음 실행하는 사람은 사용자 및 역할 화면을 볼 수 있고, 사용자 및 역할을 정의할 수 있게 됩니다.
권한 부여 테스트
응용 프로그램을 테스트할 때 정의된 모든 사용 권한이 예상대로 작동하는지 확인 합니다.응용 프로그램 디자이너의 액세스 제어 탭에 대한 디버그 권한을 활성화하면 됩니다.예를 들어, ViewSales 사용 권한을 정의했다면 그 권한에 대해 디버그용으로 부여 확인란을 선택할 수 있습니다.응용 프로그램을 디버깅할 때 판매 화면을 볼 수 있습니다. 이 때 ViewSales 권한이 있는 사용자로 실행하고 있습니다.주어진 역할에 할당될 수 있는 사용 권한을 에뮬레이션하려면 권한 조합을 설정할 수 있습니다.
[!참고]
디버깅을 위해 SecurityAdministration 권한을 설정하면 디버깅하는 동안 사용자 및 역할 관리 화면을 볼 수 있습니다.이러한 화면에서 사용자와 역할을 입력할 수 있지만 사용자 및 역할은 응용 프로그램과 함께 배포되지 않고 디버깅 권한에 사용할 수 없습니다.
보안 연결
LightSwitch을 기반으로 하고 IIS(인터넷 정보 서비스)를 실행하는 서버에 호스트되는 3 계층 클라이언트 응용 프로그램에 대해 응용 프로그램과 서버 간의 통신은 더 안전한 HTTPS 프로토콜 대신 HTTP 프로토콜을 사용합니다.이 요구 사항으로 응용 프로그램이 공격자에게 취약한 상태가 될 수 있습니다.SSL(보안 소켓 레이어) 암호화는 클라이언트 응용 프로그램과 서버 간에 전송되는 기밀 또는 개인 정보를 보호하는 데 도움이 됩니다.SSL을 사용하도록 설정하면 원격 클라이언트 응용 프로그램은 https://로 시작하는 URL을 사용하여 서버에 액세스합니다.LightSwitch를 기반으로 한 응용 프로그램을 호스팅하는 모든 사이트에 대해 SSL을 구성하는 것이 좋습니다.자세한 정보는 Configuring Secure Sockets Layer in IIS 7을 참조하십시오.
SSL을 사용하도록 설정
메뉴 모음에서 빌드, 게시를 선택합니다.
응용 프로그램 게시 마법사에서 보안 설정 탭을 선택합니다.
보안 연결(HTTPS) 필요 섹션에서 On 옵션 단추를 선택합니다.
[!참고]
이 설정을 사용하는 경우 웹 사이트가 HTTPS를 사용하도록 올바르게 구성되어 있어야 합니다.
데이터 계층에 대해 SQL Server를 사용하는 3 계층 응용 프로그램의 경우 IIS와 데이터베이스 간의 통신은 잠재적으로 취약합니다.LightSwitch를 기반으로 한 응용 프로그램에서 액세스하는 모든 데이터베이스에 대해 SSL을 구성하는 것이 좋습니다.자세한 정보는 Encrypting Connections to SQL Server를 참조하십시오.
보안 및 버전 제어
버전 제어 중인 LightSwitch 프로젝트를 사용하여 작업 중인 경우 web.config 파일의 연결 문자열은 가장 최근 프로젝트의 개발자에 대한 사용자 이름 및 암호를 포함할 수 있습니다.그런 다음 이 정보는 프로젝트를 체크 아웃하는 다음 개발자가 사용할 수 있습니다.
이 문제는 게시된 응용 프로그램에는 적용되지 않습니다. 게시 마법사의 연결 문자열 정보는 버전 제어에 저장되지 않습니다.디자인 타임에 생산 데이터베이스 대신 테스트 데이터베이스를 사용함으로써 승인을 받지 않은 사용자가 생산 데이터에 액세스하는 것을 방지할 수 있습니다.
추가 보안 고려 사항
인증 이외에 고려해야 할 다른 보안 측면이 있습니다.응용 프로그램이 민감한 비즈니스 데이터를 취급하지 않는다 하더라도 암호와 같은 다른 정보가 위험에 노출될 수 있습니다.
서버를 액세스하는 코드를 작성할 때 보안을 고려해야 합니다.예를 들어, 직원 데이터를 필터링하는 쿼리 코드를 작성하여 직원들이 자신의 데이터만 볼 수 있게 할 수 있습니다.
Private Partial Sub Employees_All_PreprocessQuery(ByRef query As IQueryable(Of Application43.Employee))
query = From item In query Where item.EmpName = Me.Application.User.Nameitem
End Sub
partial void Employees_All_PreprocessQuery(ref IQueryable<Application43.Employee> query)
{
query = from item in query where item.EmpName == this.Application.User.Name select item;
}
데이터를 표시하기 위해 이것이 수행될 때 사용자가 데이터를 업데이트하거나 삭제하고 동시 예외가 발생하면 다른 직원들의 데이터도 서버에서 반환된 오류 정보에 노출됩니다.이것을 방지하려면 업데이트 및 삭제 메서드에서 추가 코드를 작성하고 직원은 자신의 데이터만 볼 수 있도록 합니다.
Dim user As String = Me.Application.User.Name
If Me.DataWorkspace.ApplicationData.Employees.Where(Function(e) e.Id = entity.Id AndAlso e.EmpName = user).Execute().Count() = 0 Then
Throw New DataServiceOperationException("Permission error: Cannot modify a record you don't have access to.")
End If
string user = this.Application.User.Name;
if (this.DataWorkspace.ApplicationData.Employees.Where(e => e.Id == entity.Id && e.EmpName == user).Execute().Count() == 0)
{
throw new DataServiceOperationException("Permission error: Cannot modify a record you don't have access to.");
}
코딩 연습에 대한 자세한 내용은 Creating Secure Applications를 참조하십시오.