[JSP] 시큐리티

시큐리티

1. 시큐리티란?

  • 허가된 사용자만이 접근할 수 있도록 제한하는 보완 기능

2. 프로세스?

  • 사용자가 웹 페이지에 접근
  • JSP 컨테이너(Tomcat)는 요청된 페이지에 보안 제약(Constraints)이 있는지 확인
  • 사용자에게 인증(authentication)을 요청
  • 권한 부여(authorization) : JSP 컨테이너는 사용자가 해당 페이지에 접근할 수 있는지 확인. 승인

3. 역할?

  • 사용자가 권한이 없는 데이터에 접근하는 것을 막음
  • 스니핑(sniffing) : 웹 공격자가 전송 데이터를 중간에 가로채는 것을 방지

4. 그래서 시큐리티란?

  • 허가된 사용자만이 특정 웹 페이지에 접근할 수 있도록 제한하는 보안 기능
  • 사용자가 권한이 없는 데이터에 접근하는 것을 막아줌
  • 웹 공격자가 전송 데이터를 중간에 가로채는 것을 방지(스니핑)

5. 선언적 시큐리티

  • web.xml 파일(웹 애플리케이션(JSPBook) 배포 설명자)에 보안 구성을 작성하여 수행
  • 보안 역할(role), 보안 제약 사항(contraint), 인증 처리(login.jsp, login-failed.jsp) 설정

1) tomcat-users.xml 설정

role : 권한
tomecat이라는 권한을 가진 tomcat이름의 사용자

2-1) JSPBook에 있는 web.xml 설정 - BASIC 인증 처리 기법

<security-role>
		<role-name>role1</role-name><!-- 권한 -->
	</security-role>
	<security-constraint>
		<web-resource-collection><!-- 권한을 부여할 페이지 설정 -->
			<web-resource-name>JSPBook</web-resource-name>
			<!-- 접근을 제한할 요청 경로 -->
			<url-pattern>/ch10/security01.jsp</url-pattern>
           <!-- 이 요청은 아무나 못한다. role1 권한을 가지는 user만 사용가능하다. -->
			<http-method>GET</http-method>
		</web-resource-collection>
		<auth-constraint> <!-- 역할과 페이지를 연결 -->
			<description></description><!-- role1이 이 페이지와 무슨 관련이 있는지 기술 -->
			<!-- 권한이 부여된 role 이름 -->
			<role-name>role1</role-name>
		</auth-constraint>
	</security-constraint>
	<!-- 시큐리티 인증 설정 -->
	<login-config><!-- 페이지에 접근하려면 로그인을 해라 -->
		<!-- BASIC 인증 처리 기법으로 설정 -->
		<auth-method>BASIC</auth-method><!-- 아이디 비밀번호 입력하는 창 -->
	</login-config>

=> /ch10/security01.jsp 페이지에서 role1의 권한을 가진 user만 페이지를 사용 가능하게 됨

결과 화면

2-2) FORM 기반 인증 처리 기법

  • login config에서 FORM 기반 인증 처리 기법으로 설정
<security-role>
		<role-name>role1</role-name><!-- 권한 -->
	</security-role>
	<security-constraint>
		<web-resource-collection><!-- 권한을 부여할 페이지 설정 -->
			<web-resource-name>JSPBook</web-resource-name>
			<!-- 접근을 제한할 요청 경로 -->
			<url-pattern>/ch10/security01.jsp</url-pattern>
            <!-- 이 요청은 아무나 못한다. role1 권한을 가지는 user만 사용가능하다. -->
			<http-method>GET</http-method>
		</web-resource-collection>
		<auth-constraint> <!-- 역할과 페이지를 연결 -->
			<description></description><!-- role1이 이 페이지와 무슨 관련이 있는지 기술 -->
			<!-- 권한이 부여된 role 이름 -->
			<role-name>role1</role-name>
		</auth-constraint>
	</security-constraint>
	<!-- 시큐리티 인증 설정 -->
	<login-config><!-- 페이지에 접근하려면 로그인을 해라 -->
		<!-- BASIC 인증 처리 기법으로 설정 -->
<!-- 		<auth-method>BASIC</auth-method>아이디 비밀번호 입력하는 창 -->
		<!-- FORM 기반 인증 처리 기법으로 설정 -->
		<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>

결과 화면

login.jsp


 <!-- 시큐리티 역할 role1 관리 시작 -->
 	<security-role>
		<role-name>role1</role-name><!-- 권한 -->
	</security-role>
	<security-constraint>
		<web-resource-collection><!-- 권한을 부여할 페이지 설정 -->
			<web-resource-name>JSPBook</web-resource-name>
			<!-- 접근을 제한할 요청 경로 -->
			<url-pattern>/ch10/security01.jsp</url-pattern><!-- 이 요청은 아무나 못한다. role1 권한을 가지는 user만 사용가능하다. -->
			<http-method>GET</http-method>
		</web-resource-collection>
		<auth-constraint> <!-- 역할과 페이지를 연결 -->
			<description></description><!-- role1이 이 페이지와 무슨 관련이 있는지 기술 -->
			<!-- 권한이 부여된 role 이름 -->
			<role-name>role1</role-name>
		</auth-constraint>
	</security-constraint>
	<!-- 시큐리티 인증 설정 -->
	<login-config><!-- 페이지에 접근하려면 로그인을 해라 -->
		<!-- BASIC 인증 처리 기법으로 설정 -->
<!-- 		<auth-method>BASIC</auth-method>아이디 비밀번호 입력하는 창 -->
		<!-- FORM 기반 인증 처리 기법으로 설정 -->
		<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>
	<!-- 시큐리티 역할 role1 관리 끝 -->

3) admin role 만들기

<!-- 시큐리티 역할 admin 관리 시작 -->
 	<security-role>
 		<description></description>
		<role-name>admin</role-name><!-- 권한 -->
	</security-role>
	<!-- 시큐리티 제약 사항 설정 -->
	<security-constraint>
		<display-name>JSPBook Security</display-name>
		<web-resource-collection>
			<web-resource-name>JSPBook</web-resource-name>
			<!-- 접근을 제한할 요청 경로 -->
			<url-pattern>/ch04/addProduct.jsp</url-pattern>
			<http-method>GET</http-method>
		</web-resource-collection>
		<auth-constraint> <!-- 역할과 페이지를 연결 -->
			<description>권한 관리자 아이디</description><!-- role1이 이 페이지와 무슨 관련이 있는지 기술 -->
			<!-- 권한이 부여된 role 이름 -->
			<role-name>admin</role-name>
		</auth-constraint>
	</security-constraint>
	<!-- 시큐리티 인증 설정 -->
	<login-config><!-- 페이지에 접근하려면 로그인을 해라 -->
		<!-- BASIC 인증 처리 기법으로 설정 -->
<!-- 		<auth-method>BASIC</auth-method>아이디 비밀번호 입력하는 창 -->
		<!-- FORM 기반 인증 처리 기법으로 설정 -->
		<auth-method>FORM</auth-method>
		<form-login-config>
			<!-- 인증 처리를 위한 로그인 페이지 설정 -->
			<form-login-page>/ch04/login.jsp</form-login-page>
			<!-- 인증 실패 시 오류 페이지 설정 -->
			<form-error-page>/ch04/login_failed.jsp</form-error-page>
		</form-login-config>
	</login-config>
	<!-- 시큐리티 역할 admin 관리 끝 -->	

좋은 웹페이지 즐겨찾기