URL 새로쓰기(URL Rewriting)
- 매번 페이지가 실행될 때 해당 페이지의 URL에 파라미터를 붙여 실행이 되게끔 하는 방법
- URL에 정보가 노출이 되기때문에 보안상 문제가 발생할 수 있다.
숨겨진 필드(Hidden Form Variable)
- form 데이터 전송시 Hidden Type을 이용하여 값을 넘기는 방법
- URL에 직접적인 정보가 노출이 되지 않으나, 페이지가 실행이 되었을 때 브라우저에서 소스보기를 통해 노출된다.
쿠키(Cookie)
- javax.servlet.http 패키지의 Cookie 클래스를 이용한 방법
- 서버에서 만들어진 쿠키를 응답과 함께 전송하여 클라이언트측에서 저장된다.
- 클라이언트에 저장된 쿠키를 열어볼 수 있기 때문에 중요한 정보를 쿠키에 저장시 문제가 발생할 수 있다.
세션(HttpSession)
- javax.servlet.http 패키지의 HttpSession 인터페이스를 이용하는 방법
- 클라이언트의 식별을 위한 세션아이디만 클라이언트에 저장되고, 나머지는 정보는 서버에 저장된다.
- 서버의 메모리에서 관리되기 때문에 쿠키에비해 보안적인 측면에서 유리하다.
- URL새로쓰기, 숨겨진 필드 또한 SessionID를 사용해서 매 페이지로 넘겨진다.
URL새로쓰기와 숨겨진 필드 예시
- form-data 전송시 hidden속성과 URL새로쓰기를 이용한 방법또한 세션아이디의 비교를 통해 클라이언트를 식별하여, 클라이언트의 서버에 등록된 메모리를 구별하는 방식이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hidden Form Variable</h1>
<form action="temp.jsp" method="get">
<input type="text" name="name">
<input type="text" name="greeting" value="hi" hidden="true">
<input type="submit" value="이동">
</form>
<hr>
<a href="temp.jsp?name=honggildong&greeting=hi">URL Rewriting</a>
</body>
</html>
- 전송받은 데이터를 간단하게 출력하는 예제이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String name = request.getParameter("name");
String greeting = request.getParameter("greeting");
%>
<div><%= name %> <%= greeting %></div>
</body>
</html>
결과
- HIdden속성을 가진 Tag는 페이지 소스보기를 확인하면 노출이된다.
- URL에 queryString을 추가하는 방법은 URL상에 데이터가 노출이된다.
- 그렇기 때문에 위와같은 두가지 방법은 보안에 민감하지 않은 정보만을 전송하는것이 좋다.
쿠키와 세션 예시
- Cookie클래스와 JSP의 내장객체 session을 이용해 쿠키와 세션을 만든다.
- Cookie는 String, String 쌍의 값만 저장이 가능하다.
- Session은 String, Object 쌍의 값이 저장이 가능하다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Set Cookie and Session</title>
</head>
<body>
<%
String cookieName = "myCookie";
Cookie cookie = new Cookie(cookieName, "Apple");
cookie.setMaxAge(60);
response.addCookie(cookie);
session.setAttribute("idKey", "java");
session.setAttribute("pwKey", "1234");
session.setMaxInactiveInterval(60);
%>
<div><a href="viewCookieSessionInfo.jsp">결과 확인하기</a></div>
</body>
</html>
- 이후 링크를 통해 새로운 페이지를 얻고, 해당 페이지에서 쿠키와 세션 정보를 가져온다.
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>View Cookie Session Info</title>
</head>
<body>
<%
Enumeration e = session.getAttributeNames();
while(e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = (String)session.getAttribute(name);
out.println("session name : " + name + ", ");
out.println("session value : " + value + "<br>");
}
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for(int i=0; i<cookies.length; i++) {
out.println("Cookie name : " + cookies[i].getName() + ", ");
out.println("Cookie value : " + cookies[i].getValue() + "</br>");
}
}
%>
</body>
</html>
결과
- 정상적으로 Session과 Cookie에 설정된 내용이 출력됨을 확인할 수 있다.
- 또한 개발자도구를 통해 해당 웹 애플리케이션에 저장된 쿠키의 정보를 열람할 수 있다.
- 이를통해 쿠키는 클라이언트측에 저장되고 노출이될 수 있다는 점을 확인할 수 있다.
- 또한 Session역시 요청 웹브라우저의 식별을 위해 JSSESSIONID를 쿠키에 저장하고, 매 요청시마다 세션아이디를 확인을 위해 쿠키를 체크하고, 서버내 저장되어있는 세션정보에 접근을 하게 되는것이다.
쿠키와 세션의 추가적인 개념은 여기를 참고해주세요
https://tatsu.tistory.com/entry/JSP%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98
'JSP' 카테고리의 다른 글
[JSP] JSTL (0) | 2023.03.16 |
---|---|
[JSP]EL (0) | 2023.03.16 |
[JSP] Java Beans와 JSP 빈즈태그 (0) | 2023.03.15 |
[JSP] 내부객체 (0) | 2023.03.15 |
[JSP]JSP의 지시자와 액션태그 (0) | 2023.03.15 |