KDT/WEB

240307 WEB - 정리 1, 보안 취약점 1

001cloudid 2024. 3. 7. 12:55
728x90

JSP(Java Server Page)

자바, 웹 서버 동작원리

  1. JDK설치
  2. 웹 서버 설치 -> 아파치 톰캣
    웹 서버의 역할 : 1) 웹서버(아파치) 서버에 내용(파일)을 사용자에게 보여주는 기능
                               2) 웹 애플리케이션 서버(톰켓) : JSP, JAVA 코드 -> HTML로 변경해서 사용자에게 보여주는 기능

웹 서버 동작원리

Q. 웹 서버 동작원리는?

HTML 페이지

클라이언트가 HTML 페이지를 요청 - 서버에서 요청한 페이지를 응답

(사용자가 서버에 요청 - 서버에서 요청한 페이지를 응답)

웹 서버에 전달 - 웹 서버 안에 사용자가 요청한 페이지를 찾아 사용자에게 전달(응답)

 

JSP 페이지

클라이언트가 JSP 페이지 요청

- 웹 서버(아파치) 전달 

- 해당 JSP페이지 찾아 웹 애플리케이션 서버(웹 컨테이너,WAS) 전달하여 JSP, JAVA 명령을 처리하고 결과를 HTML로 변경 작업

-웹 서버에 전달

-사용자에게 전달(응답)

 

※3계층 구조

클라이언트 - 웹 애플리케이션 서버 - 데이터베이스 서버

클라이언트 : 프리젠테이션 계층

웹/애플리케이션 계층 : 프리젠테이션 계층 controller/비지니스로직 계층 service/데이터 접근 계층 DAO

데이터베이스 서버 : 데이터 베이스

 

HTTP 프로토콜

Q. http, https 차이?

HTML 요청, 응답하는 통신 규약

HTTP 요청 메세지(시작,헤더,본문) -> 웹서버 -> HTTP 응답 메세지(시작,헤더,본문)

 

웹 애플리케이션 서버 동작원리

JSP 페이지

-> request(http가 들고 온 요청 정보를 저장(주소값)), response(서버 처리결과 응답 정보를 저장). 객체 생성

-> web.xml 참조(서버의 관문 역할, 설정 정보 확인)

-> servlet(명령 처리담당자) 기억 장소를 만듦 - JAVA,JSP 명령을 처리하고 결과를 html 변경 작업(응답 정보를 response에 저장)

-> response(응답정보)를 웹 서버에 전달

-> response(응답 정보)를 http에 전달

-> 응답정보를 사용자에게 전달

-> request, response, servlet 기억장소 해제

 

JSP 내장객체

request 요청 정보

response응답정보

session연결 정보 저장

application 서버 정보

out 출력 정보

pageContext 현재페이지 정보 저장

 

사용자 | 서버

서버 시작 application내장 객체 생성 / 서버 종료 시 application 소멸

사용자가 접속 연결정보 저장하는 session 객체 서버에 생성, 연결이 끊어지면 session 소멸

클라이언트가 요청 - 서버 reqeust(요청 작업), response(응답 정보) - 응답 정보를 클라이언트에게 전달 후 소멸

 

쿠키

Q. session과 cookie 차이

※Thread 동시에 작업이 이루어지게 함

사용자 | 서버

접속하자마자 session이 만들어져 서버에 저장

서버에서 쿠키가 생성되어 접속할 때 사용자 컴퓨터에 저장

session,쿠키 값을 유지하는 용도는 동일

session은 서버에 저장, 쿠키는 사용자 컴퓨터에 저장

쿠키는 서버가 종료되어도 값이 유지

 

form 태그

기능, 폼 안에 있는 내용을 들고(name="value") 서버에 전달

action 하이퍼링크 이동, 값을 들고 하이퍼링크로 이동

method get방식, post방식에 따라 서버에서 처리하는 것이 달라짐

get 주소줄에 가져가는 방식

단, id, class js제어용, 서버에 넘어갈때는 반드시 name="값"을 가져감

request.getParameter

 

DB

Q.자바, 객체지향, SQL구문

SQL 구문 정리 : SELECT, INSERT INTO, UPDATE SET, DELETE

 


보안

<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp4/loginPro.jsp</title>
</head>
<body>
<h1>jsp4/loginPro.jsp</h1>
<h1>로그인 화면</h1>
<!-- 폼에서 입력한 내용이 서버에 전달 →서버에 request 내장객체에 저장
request에서 id, pass태그값(파라미터값)을 가져와서 변수에 저장 -->

<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");

//1단계 Driver.class 자바실행 파일 불러오기
Class.forName("com.mysql.cj.jdbc.Driver");

//2단계 불러온 파일을 DB 연결
String dbUrl ="jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPw = "1234";
Connection con = DriverManager.getConnection(dbUrl, dbUser, dbPw);

//3단계 연결정보를 이용해 SQL구문을 만들고 실행할 수 있는 객체 생성
//보안에 좋은 코드
// String sql = "select * from members where id=? and pw=?"; 
// PreparedStatement pstmt = con.prepareStatement(sql);
// pstmt.setString(1, id);
// pstmt.setString(2, pw);

//SQL 삽입 공격
//보안 취약 코드 : 아이디 kim' OR ' '1' =' 1 입력 => 비밀번호가 틀려도 로그인이됨
//java.sql.Statement
//3단계
String sql = "select * from members where id='"+id+"' and pw='"+pw+"'"; 
Statement stmt = con.createStatement();
//4단계
ResultSet rs = stmt.executeQuery(sql);


//4단계 SQL구문 실행 → 실행 후 결과 저장(select) → ResultSet 내장객체 저장
//조건 db, form id, pw가 일치하면 → ResultSet 내장객체 저장
// ResultSet rs = pstmt.executeQuery();
//5단계 결과를 이용해 다음 행 이동 → 아이디, 비밀번호 일치 출력, 아이디, 비밀번호 불일치 
if(rs.next()){
	out.println("아이디, 비밀번호 일치<br>");
	out.println("로그인 성공<br>");
// 	out.print(pstmt);
	out.print(stmt);
	//아이디 비밀번호 일치하면 로그인 표시 설정(연결되어 있는 동안 페이지 상관없이 값을 유지)
	//세션에 로그인 표시 저장("세션에 로그인 표시이름", 값)
	session.setAttribute("id",id);
	response.sendRedirect("03_main.jsp");//main.jsp 이동
} else{
	out.println("아이디, 비밀번호 불일치<br>");
	out.println("로그인 실패<br>");
// 	out.print(pstmt);
	out.print(stmt);
	response.sendRedirect("02_login.jsp");//login.jsp 이동
}
%>

</body>
</html>

 

그림 1.

 

SQL 쿼리의 논리 연산은 AND연산자 먼저 계산한 후 OR 연산자를 계산함

※ 한국인터넷진흥원 https://kisa.or.kr/ 지식 플랫폼 법령가이드라인 가이드 라인
표준프레임워크 포털 https://www.egovframe.go.kr/home/main.do 알림마당 - 관련참고문서 - 표준프레임워크 보안 개발 가이드

 

PMD 설치

Help - Eclipse Marketplace - pmd - pmd plug-in 7.0.0.

그림 2.
그림 3.
그림 4.
그림 5.

 

빨간색이 보안에 취약

 

그림 6.

 

스프링 PMD 설치

그림 7.
그림 8.

그림 8에서 체크 해제한 후 Next, Next,..해서 창이뜨면 체크 후  TrustSelect

728x90

'KDT > WEB' 카테고리의 다른 글

240311 WEB - 로그인 제어  (0) 2024.03.11
240308 WEB - 정리 2, jQuery  (0) 2024.03.08
240227 WEB - Map  (0) 2024.02.27
240223 WEB 댓글,대댓글  (0) 2024.02.23
2410220 WEB 메인에서 최신 글 보여주기, 게시판 검색  (0) 2024.02.20