본문 바로가기
Back_end/JSP

JSP - 시큐리티/보안 처리

by hyeon1016 2024. 10. 28.

시큐리티

사용자가 클라이언트를 통해 웹 페이지를 요청할 때 JSP 컨테이너는 요청된 페이지에 보안 제약이 있는지 확인하고, 허가된 사용자만 접근할 수 있게 제한하는 것을 말한다.

 

사용자 인증 확인 절차

1. 인증 : id/pwd를 통해 신원을 확인한다.

2. 권한 부여 : 인증이 완료되면 요청한 웹 페이지에 접근할 수 있는 권한을 부여한다.

 

WHY?

- 권한이 없는 상태로 데이터에 접근하는 것을 막기 위해 사용한다.(은행 계좌)

- 해킹 방지

 

처리 방법

처리 방법 설명
선언적 시큐리티 요청이 서버에 들어오기
코드 작성 없이 web.xml 파일에 보안 구성을 작성해 사용자의 인증을 수행하는 것이다.
프로그래밍적 시큐리티 요청이 서버에 들어온
request 내장 객체의 메서드를 활용해 사용자의 권한 부여를 처리하는 방식이다.

 

그룹과 사용자 추가

기존에 설정된 역할을 수정하거나 제거, 추가하기 위해

Servers/Tomcat v10.0 Server at localhost-config/tomcat-users.xml 파일에서

아래쪽에 주석 처리 되어있는 role태그와 user태그를 주석 해제 한다.

 

role 태그

- rolename 속성은 역할/그룹명으로 시스템에서 할당되는 권한을 설정한다. ex)admin, guest

 

user 태그

- username 속성은 로그인 시 사용되는 ID

- password 속성은 로그인 시 사용되는 Password

- roles는 속한 역할/그룹명이다.

 

 

 

선언적 시큐리티(전)

*모든 내용은 web.xml 안에 작성한다.

 

역할/그룹 설정

<security-role>
    <role-name>역할/그룹 이름</role-name>
</security-role>

 

웹 애플리케이션에서 사용할, 보안을 적용할 역할/그룹을 설정한다.

*role-name 속성에 설정하는 이름은 반드시 tomcat-users.xml에 등록된 사용자와 역할/그룹이어야만 한다.

 

제약 사항 설정(누구를?)

<security-constraint>
    <web-resource-collection>....</web-resource-collection>
    <auth-constraint>....</auth-constraint>
    <user-data-constraint>....</user-data-constraint>
<security-constraint>

 

요청 url에 대한 접근 권한을 정의한다.

요소 설명
web-resource-collection  어떤 URL을 검사할 것인지 정의한다.
auth-constraint 접근 가능한 역할/그룹을 정의한다.
user-data-constraint 사용자 데이터 전송 시 보안 수준을 설정한다.

 

 

web-resource-collection 요소

<web-resource-collection>
    <web-resource-name>....</web-resource-name>   
    <url-pattern>....</url-pattern>
    <http-method>....</http-method>
</web-resource-collection>
요소 설명
web-resource-name 웹 리소스의 이름을 설정한다.(식별용)
url-pattern 보호할 URL의 패턴을 설정한다. ex) " /10_1 ", " /admin/* 
http-method 보호할 요청 파라미터 전송 방식을 설정한다. GET/POST

 

auth-constraint 요소

<auth-constraint>
    <description>...</description>
    <role-name>...</role-name>
</auth-constraint>
요소 설명
description 권한 부여 제약 사항에 대해 설명한다.
role-name 접근 가능한 역할/그룹을 정의하며, 이 역할/그룹을 가진 사용자만 접근할 수 있다.

 

user-data-constraint 요소

<user-data-constraint>
    <transport-guarantee>...</transport-guarantee>
</user-data-constraint>

 

요소 설명
transport-guarantee - NONE : 기본값, 보안 전송 X
- INTEGRAL : 데이터의 무결성 보장, 암호화X
- CONFIDENTIAL : 데이터 전송 시 보안 요구, 암호화 필요 

 

 

시큐리티 인증 설정(검사 방법)

<login-config>
    <auth-method>...</auth-method>
    <realm-name>...</realm-name>
    <form-login-config>...</form-login-config>
</login-config>

 

인증 처리, 누구인지 확인하기 위한 로그인 페이지나 오류 페이지를 호출하는 데 사용된다.

요소 설명
auth-method 인증 방식 설정
realm-name 인증 영역의 이름 설정
form-login-config FORM으로 인증할 때 로그인 및 오류 페이지를 설정한다.



auth-method 요소

종류 설명
BASIC 사용자 이름과 비밀번호를 인코딩하여 전송하는 가장 간단한 인증 방법, 보안 취약
FORM  HTML 폼을 사용해 사용자의 인증을 처리한다.
DIGEST 사용자 이름과 비밀번호를 해시하여 전송하는 방법 BASIC보다 보안이 강화됨
CLIENT-CERT 클라이언트 인증서를 가지고 공인 키 인증 방식을 사용해 로그인하는 방식, 고급 보안

 

form-login-config 요소

<form-login-config>
    <form-login-page>로그인 페이지 경로</form-login-page>
    <form-error-page>오류 페이지 경로</form-error-page>
</form-login-config>

 

인증 방식이 FORM일 때 사용하는 태그로 인증 처리를 위한 로그인 및 오류 페이지를 설정한다.

 

로그인 페이지의 요구사항(반드시 지켜야함)

속성
form 태그의 action 속성 j_security_check
사용자의 name 속성 j_username
비밀번호의 name 속성 j_password

 

 

프로그래밍적 시큐리티 처리(후)

선언적 시큐리티의 보안으로 충분하지 않을 때 request 내장 객체의 메서드를 사용해 사용자를 승인하는 방법

메서드 반환 타입 설명
getRemoteUser() String 사용자의 ID를 반환한다.
getAuthType() String 현재 요청에 대한 인증 방식을 반환한다.
isUserInRole(String role) boolean 사용자의 역할/그룹이 role인지 확인한다.
getProtocol()  String 웹 브라우저의 요청 프로토콜을 가져온다.
isSecure() boolean 웹 브라우저에서 https로 접근하면 true, http로 접근하면 false 반환
getUserPrinciple()  Principle 현재 인증한 사용자의 이름을 포함한 Principle 객체를 반환

 

'Back_end > JSP' 카테고리의 다른 글

JSP - 필터  (0) 2024.10.28
JSP - 예외처리  (0) 2024.10.28
JSP - 다국어 처리  (2) 2024.10.28
JSP - 유효성 검사  (2) 2024.10.28
JSP - 파일 업로드  (1) 2024.10.28