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
반응형