Java Web
JSP 와 Servlet의 차이점은 무엇인가요?
Servlet
서버에서 요청을 받아 웹페이지를 동적으로 작동시키기 위한 자바로 만든 서버 사이드 프로그램이다.
자바 코드 안에 HTML 코드를 넣는다.
JSP
자바 언어 를 기반으로 하는 서버사이드 서블릿 기반 스크립트 언어이다.
HTML 언어 안에 자바코드가 들어가는 형식이다.
서블릿의 단점을 보완하고 기술을 확장하였다.
JSP 기본 제공하는 객체는 무엇이 있나요?
Request : 클라이언트의 요청 정보를 저장
Response : 클라이언트에게 보내는 응답 정보를 저장
pageContext : JSP 페이지에 대한 정보를 저장
Session : HTTP 세션 정보를 저장한다.
Application : 웹 애플리케이션에 대한 정보를 저장한다.
Out : JSP 페이지가 생성하는 결과를 출력할 때 사용되는 출력 스트림
Config : JSP 페이지에 대한 설정 정보 저장
Page : JSP 페이지를 구현한 자바 클래스 인스턴스
Exception : 예외 객체, 에러 페이지에 사용
4개의 JSP Scope에는 무엇이 있나요?

Application : 웹 어플리케이션이 시작되고 종료될때까지 변수가 유지 될 경우 사용
하나의 애플리케이션 당 1개의 application 객체 생성
애플리케이션 종료 시 객체 반환
모든 영역에서 공유가 가능한 데이터
모든 클라이언트가 공통으로 사용해야 할 값들이 있을 때 사용한다.
Session : 웹 브라우저 별로 변수가 관리되는 경우 사용
서로 다른 페이지(리소스) 여도 객체 공유 가능
하나의 브라우저 당 1개의 session 객체 생성
세션 종료시 반환
같은 브라우저 내 에서 요청되는 페이지는 모두 같은 객체를 공유
예를 들어, 쇼핑몰 장바구니, 구매목록, 결재내역, 로그인, 회원가입 등과 같이 개별 클라이언트의 정보를 유지할 필요가 있을 때 사용한다.
Request : http 요청을 WAS 가 받아서 웹 브라우저 에게 응답할때 까지 변수가 유지될 경우
가장 많이 사용되는 스코프
페이지와 페이지 사이에 존재하고 하나의 관계에서만 사용 가능하다.
요청을 받고 그 요청에 대한 응답을 하기 전까지 객체가 유효하다.
다른 페이지에 공유하려면 forward, include 방식을 사용해야한다.
forward 시 값을 유지하고자 사용한다.
Page : 페이지 내에서 지역변수 처럼 사용
위 영역 과는 달리 내장객체가 아닌 JSP 파일에 내장되있는 pageContext 객체를 통해 접근할수있다.
page 내에서만 객체가 유효하다.
세션과 쿠키의 차이는 무엇인가요?
세션
서버와 클라이언트의 연결 상태이자 웹사이트 이용 중에 사용되는 데이터 (사용자 정보 등) 을 저장하기 위한 방법 중 하나이다.
세션 데이터는 서버에 저장되어진다.
브라우저 종료 시 삭제되며 만료시간 설정이 가능하다.
쿠키
웹사이트 방문시 해당 웹사이트 서버에서 사용자 PC 에 저장하는 데이터 조각 파일을 의미한다.
세션과 다르게 사용자 PC 에 저장 되어진다.
만료시간 초과 시 삭제 되며 브라우저가 꺼져도 만료시간을 초과하지 않았다면 삭제되지않음.
세션 과정을 설명해주세요.
클라이언트가 페이지를 요청한다.
서버는 해당 클라이언트의 Request-Header 를 탐색해 Session-Id 를 가지고있는지 확인한다.
Session-Id 가 없을 시 세션을 생성한 뒤 세션ID가 담긴 쿠키를 사용자에게 내보내고 해당 세션ID 는 서버에 저장한다.
다시 접속 시 해당 쿠키가 가지고있는 세션ID 를 가져와 서버의 세션ID 와 비교해서 맞다면 해당 요청에 맞는 반환값을 내보낸다.
쿠키를 사용할 수 없을 때 세션을 대신 사용할 수 있을까요?
불가하다. 쿠키 와 세션은 대립하는 관계가 아닌 상호보완적인 관계이다.
쿠키를 사용하지 않으면 세션을 유지시킬 수단, 즉 검증수단이 없어지기 때문에 세션 유지가 불가능하다.
스프링 MVC와 Struts의 차이는 무엇인가요?
Struts
스트럿츠는 웹에 특화된 프레임워크 이다.
요청이 들어오면 프론트 컨트롤러 방식으로 해당 요청을 Parser 하여 XML에 입력된 액션 값에 따라 액션이 진행된다.
계층구조가 없다.
비교적 스프링 보단 무거운 편이다.
Spring MVC
스프링 MVC는 웹 뿐만 아니라 자바 애플리케이션에도 특화된 프레임워크 이다.
스프링 역시 프론트 컨트롤러 방식이고 XML 을 사용하지만 Bean 을 통해서 설정도 가능하다.
3개의 계층으로 나누어진다. ( View, Service, Controller )
비교적 스트럿츠 보다 가벼운 편이다.
SQL Injection을 피할 수 있는 방법을 설명해주세요.
SQL Injection
개발자가 의도하지 않은 쿼리를 날려 해당 디비에 변조를 일으키거나 디비를 조회하여 이익을 갈취하는 공격
SQL Injection 방지 방법
입력값 검증
프론트 단에서 자바스크립트로 해당 입력값을 한번 더 검증한다. 예를 들어 특수문자 같은걸 방지 하는 식
그리고 서버 단에서 프론트 단에 검증과 관계없이 한번 더 정규 표현식 같은 방법으로 검증해준다.
프로시저
쿼리문을 하나의 함수 처럼 취급해서 검증하는 방식이다.
쿼리문에 하나의 형식을 지정해서 해당 형식에 일치하지 않다면 요청을 짤라버릴수있다.
프로시저 적용 전
try{
String uId = props.getProperty(“jdbc.uId”);
String query = “SELECT * FROM tb_user WHERE uId=” + uId;
stmt = conn.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
.. …
}
}catch(SQLException se){
.. …
}finally{
.. …
}
프로시저 적용 후
try{
String uId = props.getProperty(“jdbc.uId”);
String query = “SELECT * FROM tb_user WHERE uId= ?”
stmt = conn.prepareStatement(query);
stmt.setString(1, uId);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
.. …
}
}catch(SQLException se){
.. …
}finally{
.. …
}그 후 쿼리 출력값을 한번 더 필터링 해준다. (XSS 공격을 막기 위해서)
XSS 공격이 무엇이고, 어떻게 피할 수 있는지 설명해주세요.
XSS 공격은 공격자가 사용자 브라우저에 임의의 스크립트 코드를 입력하여 쿠키를 갈취, 웹사이트 변조,
악의적 컨텐츠 삽입 등을 일으키는 공격을 뜻한다.
Stored XSS
공격자가 미리 임의의 사이트에 악의적인 스크립트를 삽입(저장) 하여 사용자가 해당 게시글을 클릭하면 스크립트가 실행되는 공격방식
ex.
공격자가 게시글에 악의적인 스크립트를 삽입하여 등록해놓는다.
해당 게시글은 서버에 저장되어진다.
사용자가 해당 게시글을 클릭하면 담겨있던 스크립트가 실행된다.
Reflected XSS
공격자가 사용자에게 가령 메일에 링크를 담아보낸 뒤 해당 링크릉 사용자가 클릭하면 악의적인 스크립트가 실행된다.
악의적인 사용자가 악성 스크립트가 담긴 URL을 만들어 일반 사용자에게 전달하는 경우입니다.
ex.
공격자가 사용자에게 메일에 링크를 담아 보낸다.
해당 메일에는 악의적인 스크립트가 실행되는 링크가 담겨있다.
사용자가 해당 메일을 클릭하면 해당 스크립트가 실행된다.\
CSRF 공격이 무엇이고, 어떻게 피할 수 있는지 설명해주세요.
CSRF (Cross Site Request Fogery) : 사이트 간 요청 위조
CSRF 공격을 하기 위한 3가지 조건이 있다.
해당 사이트에 사용자가 로그인 되어있는 상태여야 한다.
사용자가 공격자가 만들어놓은 피싱사이트를 클릭해야 한다.
그래야 유저의 세션 정보를 갈취 할수 있기에!
공격자는 해당 사이트의 요청 방식에 대해 파악하고 있어야 한다.
동작 원리
유저는 사이트의 로그인을 한 상태이다.
그때 공격자는 유저에게 만들어놓은 피싱 사이트로 클릭을 유도한다.
유저가 피싱 사이트를 클릭하면 해당 악성 스크립트가 실행되면서 유저가 갖고있는 SessionId 를 갈취해 악의적인 요청을 사이트로 보낸다. ex. 비밀번호 변경, 계좌 이체 등등
서버는 올바른 Session ID 가 왔기에 신뢰된 유저가 보낸 요청으로 판단해 해당 요청을 실행한다.
방지 방법
Referer Check
각 Http 요청 헤더에는 Referer 정보가 있다. 호스트와 Referer 정보가 일치하는지 확인하여 올바른 요청인지 체크할수있다.
CAPCHA

CRSF 토큰
사용자 세션의 임의의 값을 저장해 요청 시 마다 해당 값을 체크하는 방법
XSS 와 CSRF 의 차이점
XSS 는 사용자가 사이트를 신뢰하고 사용자 측에서 발생하는 문제이다.
CSRF 는 사이트가 유저를 신뢰하고 서버 측 에서 발생하는 문제이다.
Last updated