JSP

JSP 웹 프로그래밍 - 시큐리티

록's 2023. 3. 6. 12:17
728x90
반응형

시큐리티의 개요

 

시큐리티

  • 허가된 사용자만이 특정 웹 페이지에 접근할 수 있도록 제한하는 보안 기능
  • 사용자가 권한이 없는 데이터에 접근하는 것을 막거나 웹 공격자가 전송데이터를 중간에 가로채는 것을 방지하는 등 중요한 역할
  • 인증(authentication)
    • 사용자가 웹 브라우저를 사용하여 웹 페이지에 접근할 때 JSP 컨테이너는 요청된 페이지에 보안 제약이 있는지 확인하고 사용자에게 사용자의 이름과 암호를 확인하여 수행
  • 권한 부여(authorization)
    • 특정 사용자가 해당 페이지에 접근할 수 있는지 확인하여 승인

 

 

시큐리티 처리 방법

 

 

 

웹 서버에 역할과 사용자 구성하기

  • /설치된 톰캣의 루트/conf/ 폴더 내의 tomcat-users.xml 파일
    • 2개의 역할 ❶ tomcat, ❷ role1을 가지고,
    • 3개의 사용자 ❸ tomcat, ❹ both, ❺ role1이 서로 다른 역할에 매핑

 

 

 

선언적 시큐리티 처리

 

선언적 시큐리티(declarative security)

  • 웹 애플리케이션 배포 설명자 web.xml 파일에 보안 구성을 작성하여 수행하는 방식
  • 웹 애플리케이션의 보안을 달성하기 위해 별도의 코드를 작성할 필요 없이 web.xml 파일에 보안 구성을 작성하여 사용자가 웹 페이지에 접근할 수 있게 함.
    • web.xml 파일에는 보안 역할, 보안 제약 사항, 인증 처리 등을 설정하여 보안을 구성

 

 

시큐리티 역할 설정하기

  • <security-role>은 웹 애플리케이션에 사용하는 역할을 나열하는 요소
  • web.xml 파일에 구성

 

 

시큐리티 제약 사항 설정하기

  • 사용자의 요청 URL에 대한 접근 권한을 정의하는데 사용
  • web.xml 파일에 접근 권한 내용을 구성

 

 

 

  • <web-resource-collection> 요소
    • 웹 자원에 대한 접근을 설정하는 요소
    • <url-pattern>, <http-method>, <webresource-name> 등의 하위 요소로 구성

 

 

 

 

<auth-constraint> 요소

  • 권한이 부여된 사용자만이 웹 자원에 접근할 수 있도록 이름을 설정하는 요소로 형식은 다음과 같음
    • <auth-constraint> 요소에는 <web-resource-collection> 요소의 <urlpattern>과 <http-method>에 설정된 경로에 접근할 수 있는 권한이 부여된 사용자의 이름을 지정
    • <auth-constraint> 요소를 생략하면 웹 서버는 사용자 인증을 요구하지 않고 사용자의 요청을 승인

 

 

 

 

  • <user-data-constraint> 요소
    • 클라이언트와 서버 간에 데이터를 전송할 때 데이터를 보호하는 방법을 설정하는 요소

 

 

 

시큐리티 인증 설정하기

  • 인증 처리를 위한 로그인 페이지나 오류 페이지를 호출하는 데 사용
  • web.xml 파일에 인증 관련 내용을 구성

 

 

  • <auth-method> 요소
    • 웹 애플리케이션의 인증 처리 기법을 설정하는 요소
    • 인증 처리 기법은 BASIC, DIGEST, FORM, CLIENT-CERT 등으로 이 중 하나를 <auth-method> 요소에 설정

 

 

 

  • <realm-name> 요소
    • 기본 인증의 영역 이름을 설정하는 요소
  • <realm-name> 요소에 설정된 영역 이름은 대개 웹 브라우저의 로그인 대화상자에 표시
  • <realm-name> 요소는 FORM 기반 인증이나 다른 인증 방법에 필요하지 않기 때문에 아무런 영향을 미치지 않지만, <login-config> 요소에 대한 설명 속성이 없으므로 데이터를 문서화하는 데 일반적으로 사용

 

 

  • <form-login-config> 요소
    • 인증 처리를 위한 로그인 및 오류 페이지를 설정하는 요소
    • <auth-method> 요소가 FORM 기반 인증 처리 기법으로 설정되었을 때 사용
    • <form-loginpage>, <form-error-page> 등의 하위 요소로 구성됨
    • 로그인 및 오류 페이지의 경로는 웹 애플리케이션 이름(이클립스에서 프로젝트 이름에 해당됨)을 기준으로 설정

 

 

 

기본 인증 처리 방법으로 보안 처리하기

- 출력 -

로그인창 뜸.

 

 

 

 

폼 기반 인증 방법으로 보안 처리하기

 

 

 

프로그래밍적 시큐리티 처리

 

프로그래밍적 시큐리티(programmatic security)

  • 웹 애플리케이션의 보안을 위해 코드를 작성하여 사용자의 권한 부여를 처리하는 방식
  • 선언적 시큐리티의 보안으로 충분하지 않을때 request 내장 객체의 메소드를 사용하여 사용자를 승인하는 방법

 

 

프로그래밍 방식으로 보안 처리하기

// web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <security-role>
	<role-name>role1</role-name>
  </security-role>
  
  <security-constraint>
    <web-resource-collection>
	<web-resource-name>JSPBook</web-resource-name>
	<url-pattern>/ch10/security02.jsp</url-pattern>
	<http-method>GET</http-method>	
    </web-resource-collection>
    <auth-constraint>
	<description></description>
	<role-name>role1</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
	<auth-method>FORM</auth-method>
	<form-login-config>
		<form-login-page>/ch10/login.jsp</form-login-page>
		<form-error-page>/ch10/login_failed.jsp</form-error-page>
	</form-login-config>
  </login-config>
</web-app>
// security02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Security</title>
</head>
<body>
	<p> 사용자명 : <%=request.getRemoteUser() %>
	<p> 인증방법 : <%=request.getAuthType() %>
	<p> 인증한 사용자명이 역할명 "tomcat"에 속하는 사용자인가요?
		<%=request.isUserInRole("tomcat")%>
	<p> 인증한 사용자명이 역할명 "role1"에 속하는 사용자인가요?
		<%=request.isUserInRole("role1")%>	
</body>
</html>

- 출력 -

 

 

728x90
반응형