JAVA/인증&보안

[인증/보안] 기초

코딩공대 2022. 11. 30. 10:00
728x90

1. HTTPS(Hyper Text Transfer Protocol Secure Socket layer)

기존 HTTP에 S(Secure)를 더해 보안을 한 것
  • 암호화
제 3자가 서버와 클라이언트가 주고받는 정보를 탈취할 수 없도록 하는 것
  • 인증서
서버의 신원을 보증하여 진짜 인증받은 사이트인지 아닌지 확인해주는 것

2. Hashing

알고리즘을 이용해 정보를 관리하는 과정
  • 해싱의 특징
    1. 해시 값을 해독할 때에는 많은 시간이 걸려야하지만 해시 값을 만드는 데에는 오래걸리지 않아야 한다.
    2. 해시 값들은 최대한 다른 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가져야 한다.
    3. 문자열에 아주 작은 단위의 변경이 있더라도 반환되는 해시 값은 완전히 다른 값을 가져야 한다.

3. Cookie

서버에서 클라이언트에 데이터를 저장하는 방법중 하나
서버가 원하면 클라이언트에서 쿠키를 이용하여 데이터를 가지고 올 수 있다.
  • 쿠키 옵션
    1. Domain : 서버에 접속할 수 있는 이름, 서버와 요청의 도메인이 일치하는 경우 쿠키 전송
    2. Path : 세부경로라고 하며 서버가 라우팅할 때 사용하는 경로, 서버와 요청의 세부경로가 일치하는 경우 쿠키 전송
    3. MaxAge or Expires : 쿠키의 유효기간을 정하는 옵션
      • 세션 쿠키 : MaxAge나 Expires옵션이 없는 쿠키, 브라우저가 실행 중일때 사용할 수 있는 임시 쿠키. 브라우저를 종료하면 해당 쿠키는 삭제된다.
      • 영속성 쿠키 : 브라우저의 종료 여부와 상관없이 MaxAge나 Expires에 지정된 유효시간만큼만 사용가능한 쿠키.
    4. Secure : 쿠키를 전송해야 할 때 사용하는 프로토콜에 따른 쿠키전송 여부를 결정(스크립트의 쿠키 접근 가능 여부 결정)
    5. HttpOnly : 브라우저의 쿠키에 접근 여부 결정(스크립트의 쿠키 접근 가능 여부 결정)
    6. SameSite : Cross-Origin 요청을 받은 경우 요청에서 사용한 메소드와 해당 옵션의 조합으로 서버의 쿠키 전송 여부를 결정(CORS 요총의 경우 옵션 및 메서드에 따라 쿠키 전송 여부 결정)
      • Lax : Cross-Origin 요청이면 'GET'메소드에 대해서만 쿠키를 전송할 수 있다.
      • Strict : Cross-Origin이 아닌 same-siite인 경우에만 쿠키를 전송 할 수 있다.
      • None : 항상 쿠키를 보내줄 수 있습니다. 다만 쿠키 옵션 중 Secure 옵션이 필요하다.

4. Session

사용자가 인증에 성공한 상태를 세션이라고 한다.
세션은 웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용하고 쿠키에는 서버에서 발급한 세션 아이디가 저장된다.

5. 웹 보안 공격

  • SQL Injection
클라이언트가 넘겨준 정보를 그대로 SQL에 삽입하여 input FROM 부분에 일반 텍스트가 아닌 SQL문을 작성한다.
WHERE절에서 OR 은 AND보다 연산순위가 낮기 때문에 결국 로그인에 성공한다.
  • SQL Injection 대응 방안
- 입력 요청값 검증 : SQL문은 사람이 사용하는 자연어와 비슷하기 때문에 키워드를 막는데에는 한계가 있다. 따라서 블랙리스트가 아닌 화이트 리스트방식으로 해당 키워드가 들어오면 다른 값으로 치환하여 SQL Injection에 대응할 수 있다.
     ※ 보안에서 화이트 리스트란?
      : 기본청책이 모두 차단된 상태에서 예외적으로 접근이 가능한 대상을 지정하는 방식, 그 지정된 대상들을 말한다.

- Prepared Statement 구문 사용 : Prepared Statement 구문을 사용하면 사용자의 입력이 SQL문으로부터 분리되어 SQL Injection을 방어할 수 있다. 사용자의 입력 값이 전달 되기 전에 데이터베이스가 미리 컴파일하여 SQL을 바로 실행하지 않고 대기하며, 사용자의 입력값을 단순 텍스트로 인식한다. 따라서 입력 값이 SQL문이 아닌 단순 텍스트로 적용되며 공격에 실패하게 된다.

- Error Message 노출 금지 : 공격자는 데이터베이스의 Error Message를 통해 테이블이나 컬럼 등 데이터베이스의 정보를 얻을 수 있다. 에러가 발생한 SQL문과 에러 내용이 클라이언트에 노출되지 않도록 별도의 에러핸들링이 필요하다.
  • Cross-Site Request Forgery(CSRF)
주소가 다른 웹사이트에서 요청을 조작하는 것
  • CSRF 공격을 하기위한 조건
    1. 쿠키로 로그인을 한 경우 : 쿠키로 어떤 유저인지 알 수 있어야 한다.
    2. 예측할 수 있는 요청 / Parameter를 가지고 있어야 함 : request에 해커가 모를 수 있는 정보가 담겨있으면 안된다.
  •  CSRF 대응 방안
- CSRF 토큰 사용하기 : 서버측에서 CSRF 공격에 보호하기 위한 문자열을 유저의 브라우저와 웹 앱에만 공개

- Same-Site Cookie 사용하기 : 같은 도메인에서만 세션 / 쿠키를 사용할 수 있다.

'JAVA > 인증&보안' 카테고리의 다른 글

[인증/보안] JWT TCP, CIA, RFC  (0) 2023.04.27
[인증/보안] OAuth2  (0) 2022.11.30
[인증/보안] JWT(JSON Web Token)  (0) 2022.11.30
[인증/보안] Spring Security  (0) 2022.11.30