JSP 19. 암호 보안 & Connection Pool & reflection

zhyun1220·2020년 12월 14일
0

JspSpring

목록 보기
24/39

예정

쿠키라는 녀석을 이용해서 클라이언트정보를 유지
리플렉션 적용


2020.12.14 월요일

패키지 member dao,service 구성 로그인 처리

  • businesslogic (서비스)
    • 인증로직을 넣어서 체크 가능
    • 케이스를 여러개 넣을 수 있음
  • 비밀번호 오류 횟수 초과
    • persistent layer에서 데이터 가져와서
      businesslogic에서 로직 체크하고 결과 보냄

      추가하고 보기 - 코드조각 띄워서 사용할때 드래그

      위에 나온결과 복붙해서 소스로 사용함
SELECT '.'|| LOWER(COLUMN_NAME)
       ||'(rs.get'|| DECODE(DATA_TYPE, 'NUMBER','Int ', 'String ')
       ||'("'
       ||UPPER(COLUMN_NAME)
       ||'"))'
  FROM COLS
 where TABLE_NAME = 'MEMBER'
 ORDER BY COLUMN_ID;
  • int와 Integer의 차이점
    • 기본형과 객체참조형
    • null 허용 여부 (마일리지 null 가능)

SQL INJECTION

  • statement 객체 이용했을때 문제점

  • ' OR '1'='1'; delete from member where '1'='1

  • ' OR '1' = '1

    • password칸에 저렇게 쓰면 member테이블이 삭제된다 --> 데이터검증을 잘 안해서

방지방법

1. 입력 데이터 검증 validate() -- 컨트롤러단

2. prepared statement

  • sql 공격기법?
  • 컴파일 되어있는 쿼리객체
  • 다오의 입장에서 검증이 거치고 온 녀석인지 확인할 수가 없다
  • 다오도 다오나름대로 검증(보안)을 세워야한다
  • 다오가 sql공격을 막을 수 있는 방법은?
    OR delete from 예약어를 데이터로 처리한다
    쿼리로 실행할 수 없게
  • prepared 미리 컴파일되어있음
  • stmt는 쿼리실행하며 동적 컴파일 진행
    쿼리 수정(예약어 추가?) 불가능

참고

기술안내서 가이드


NIST기준
이 세가지 써볼 예정

부호화 (encode,decode)

data URI scheme 검색

%23 (Percent Encoding / URL encoding), Base64

  • 데이터를 전송하거나 저장하기 위해 시스템이 인지할 수 있는 데이터 표현방식으로 바꾸는 작업
  • 인코딩 : 브라우저가 읽을 수 있도록 하는 목적
  • base64로 인코딩 : 브라우저 렌더링엔진이 읽을 수 있도록

암호화 (encrypt/decrypt)

허가되지 않은 유저가 데이터를 읽을 수 없도록 데이터 표현방식을 바꾸는 작업
누군가가 읽을 수 없도록, 허가된 사람 권한이 있는 사람은 읽을 수 있어야 함

단방향 암호화

decrypt 불가능
MD5 -> SHA-512
해쉬함수를 사용하면 해쉬키가 생기는데 해쉬키 길이를 512 숫자가 나타내고 있다

양방향 암호화

decrypt 가능
1) 대칭키(비밀키) AES 블록암호
AES 참고
암복호화에 동일한 비밀키 사용
단점 : A라는 키로 암호화를 했는데 키까지 한세트로 보내서 중간에 가로채면 취약

해시함수 SHA-512

해시함수 참고

2) 비대칭키(공개키) RSA
공개키와 개인키로 구성된 한쌍의 키로 암복호화 수행
비대칭이란? 암호화할때 키와 복호화할때 키가 다르다

Https (ex)네이버

  • 응답데이터에 숨어있는것이 비밀키
    • 서버에서 private키를 사용 -- 비밀키 자체를 암호화
    • 암호화된 키를 응답데이터에 넣어 보냄

  • 로그인창에서 비밀번호를 치게되면 F12 네트워크창에 keys2.nhn 생성된게 보인다
  • 로그인 시 타이핑하며 비동기요청 넘어가면서 키를 받아옴
  • 이 비밀키로 암호화 시켜서 로그인 정보 넘김

openSSL

  • 실제인증서가 저장되어있는 위치는 클라이언트단
  • 가상 인증서가 사용자 pc에도 저장이 되어있어야한다

암호화 목적

  • 목적에 따라 알고리즘 식별해서 사용
  • 암호화 알고리즘 구조 파악

로그인 개발 순서

1. Domain layer (MEMBERVO)
의존성이 제일 없는 녀석부터 만든다.
2. Persistence Layer(dao)
인터페이스를 분리해서 협업이 가능하도록 해야한다
IDAOIMPL
IAuthenticateService


웹어플리케이션
3-tier

DBCP Component --DVD 대여 역할

mybatis


profile
HI :)

0개의 댓글