- 시큐리티의 개요
- 시큐리티는 허가된 사용자만이 특정 웹 페이지에 접근할 수 있도록 제한하는 보안 기능입니다.
- 사용자가 웹 브라우저에 접근할 때 JSP 컨테이너는 요청된 페이지에 보안 제약을 확인하고, 사용자에게 인증을 요청합니다.
- 인증이 완료되면 JSP 컨테이너는 특정 사용자가 해당 페이지에 접근할 수 있는지 확인하여 승인하는데 이를 권한 부여(authorization)이라고 합니다.
- 시큐리티 처리 방법
시큐리티 처리 방법 | 설명 |
선언전 시큐리티 | 코드 작성 없이 web.xml 파일에 보안 구성을 작성하여 사용자의 인증을 수행하는 방식 |
프로그래밍적 시큐리티 | request 내장 객체의 메소드를 통해 사용자의 권한을 부여를 처리하는 프로그래밍 방식 |
- 웹 서버에 역할과 사용자 구성하기
- 웹 애플리 케이션의 인증과 권한 부여를 위해 톰캣 서버에 사용자와 역할을 쉽게 생성하고 구성할 수 있습니다.
- 톰캣 서버에 인증 정보가 저장되는 장소는 /설치된 톰캣의 루트/conf/ 폴더 내 tomcat-user.xml 파일입니다.
<?xml version="1.0" encoding="UTF-8"?>
---(생략)---
<tomcat-users --->
---(생략)---
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="<must-be-changed> roles="tomcat"/>
<user username="both" password="<must-be-changed> roles="tomcat, role1"/>
<user username="role1" password="<must-be-changed> roles="role1"/>
-->
</tomcat-users>
- 2개의 역할 tomcat, role1을 가지고 3개의 사용자 tomcat, both, role1이 서로 다른 역할에 매핑되는 코드입니다.
- 선언적 시큐리티 처리
- 선언적 시큐리티(Declarative Security) 는 웹 애플리케이션 배포 설명자 web.xml 파일에 보안 구성을 작성하여 수행하는 방식
- web.xml 파일에 보안 역할, 보안 제약 사항, 인증 처리 등을 설정하여 사용자가 웹 페이지에 접근할 수 있게 설정한다.
- 시큐리티 역할 설정하기
- <Security-role> 은 웹 애플리케이션에 사용하는 역할을 나열하는 요소로, 형식은 다음과 같습니다.
<!-- web.xml -->
<security-role>
<role-name>역할 이름</role-name>
</security-role>
- 역할 이름 : tomcat-users.xml에 등록된 역할과 사용자여야 합니다.
- 시큐리티 제약 사항 설정하기
- 시큐리티 제약 사항(Security Constraint)은 사용자의 요청 URL에 대한 접근 권한을 정의하는데 사용하며 형식은 다음과 같습니다.
<security-constraint>
<web-resource-collection> --- </web-resource-collection>
<auth-constraint> --- </auth-constraint>
<user-data-constraint> --- </user-data-constraint>
</security-constraint>
- <security-constraint> 를 구성하는 하위 요소
요소 | 설명 |
<web-resource-collection> | 웹 자원에 대한 접근을 설정한다. |
<auth-constraint> | 웹 자원에 접근할 수 있는 인증된 사용자를 설정한다. |
<user-data-constraint> | 데이터 전송 시 데이터 보호를 설정한다. |
- <web-resource-collection> 요소
<!-- 웹 자원에 대한 접근을 설정하는 요소 -->
<web-resource-collection>
<web-resource-name>자원 이름</web-resource-name>
<url-pattern>접근 제한 URL</url-pattern>
<http-method>전송 방식(GET/POST)</http-method>
</web-resource-collection>
- <web-resource-collection> 을 구성하는 하위 요소
요소 | 설명 |
<web-resource-name> | 웹 자원의 이름을 설정하며 생략할 수 있다. |
<url-pattern> | 접근 제한을 요청할 URL 목록을 설정한다. 자원에 대한 접근을 제한하지 않는 경우 생략할 수 있다. |
<http-method> 또는 <http-method-omission> |
http 메소드를 설정한다. (GET 또는 POST) |
- <auth-constraint> 요소
<!-- 권한이 부여된 사용자만이 웹 자원에 접근할 수 있도록 이름을 설정하는 요소 -->
<auth-constraint>
<description>설명</description>
<role-name>역할 이름</role-name>
</auth-constraint>
- <auth-constraint> 를 구성하는 하위 요소
요소 |
설명 |
<description> | 권한 부여 제약 사항에 대한 설명을 기술한다. |
<role-name> | 권한이 부여된 사용자의 이름을 대문자와 소문자를 구분하여 설정한다. 모든 사용자에게 권한을 부여하려면 *로 표시한다. <role-name> 요소를 생략하면 <url-pattern> 요소에 설정된 접근 제한 URL에 대한 사용자의 요청을 허용하지 않는다. |
- <user-data-constraint> 요소
<user-data-constraint>
<trasport-guarantee>NONE/INTEGRAL/CONFIDENTIAL</trasport-guarantee>
</user-data-constraint>
- <user-data-constraint>의 종류
종류 | 설명 |
NONE | 기본값으로 데이터를 보호하지 않겠다는 의미이다. |
INTEGRAL | 전송 중 데이터가 변경되지 않았음을 보장한다는 의미이다 (데이터 무결성) |
CONFIDENTIAL | 전송 중 데이터를 아무도 훔쳐보지 않았음을 보장한다는 의미이다 (기밀성) |
- 프로그래밍적 시큐리티 처리
- 프로그래밍적 시큐리티 (Programming Security) 는 웹 애플리케이션의 보안을 위해 코드를 작성하여 사용자의 권한 부여를 처리하는 방식입니다.
- 보안 관련 request 내장 객체의 메소드
메소드 | 형식 | 설명 |
getRemoteUser() | String | 사용자의 인증 상태를 반환한다. |
getAuthType() | String | 서블릿을 보호하는 데 사용되는 인증 방식의 이름을 반환한다. |
isUserInRole(java.lang.String role) | boolean | 현재 인증된 사용자에게 설정된 역할이 있는지 확인한다. 설정된 경우 true를 반환하고 그렇지 않은 경우 false를 반환한다. |
getProtocol() | String | 웹 브라우저의 요청 프로토콜을 가져온다. |
isSecure() | boolean | 웹 브라우저에서 https 요청으로 request가 들어왔는지 확인한다. 웹 브라우저에서 https로 접근하면 true를 반환하고, http로 접근하면 false를 반환한다. |
getUserPrinciple() | Principle | 현재 인증한 사용자의 이름을 포함하여 java.security.Principle 객체를 반환한다. |
'Back-End > JSP' 카테고리의 다른 글
4. 유효성 검사 - 01. 기본 유효성 검사와 데이터 형식 유효성 검사 (0) | 2024.06.07 |
---|---|
3. JSP 페이지 처리 기법 - 02. 파일 업로드 (0) | 2024.05.31 |
3. JSP 페이지 처리 기법 - 01. form 태그와 폼 데이터 처리 (0) | 2024.05.30 |
2. JSP 기본 문법 - 01.JSP 태그 : 액션 태그와 내장객체 (0) | 2024.05.28 |
2. JSP 기본 문법 - 01.JSP 태그 : 디렉티브 태그 (0) | 2024.05.22 |