Cookie & Session & SQL Injection & CSRF

2023. 4. 3. 08:29·⚙️ Ops/CS

💡 Cookie

서버에서 클라이언트에 데이터를 저장, 클라이언트에 저장된 쿠키를 이용하여 데이터를 가져옴


Cookie Option

  • Domain
    • 도메인 불일치 시 쿠키 전송 X
    • 도메인이란? 서브 도메인(ex: www)을 제외한 URL 중 포트까지의 URL을 의미함
    • 이 옵션을 통해 도메인이 다를때 발생할 수 있는 취약점 공격에 대한 방어가 가능함

  • Path
    • 세부 경로 라우팅 기능
    • Default Path = '/'
    • 설정된 Path가 만족하는 경우, 하위의 경로가 존재해도 쿠키 전송이 가능함

  • MaxAge & Expires
    • MaxAge : second 설정 == Session 쿠키
    • Expires : date 설정 == Persistent 쿠키

  • Secure
    • https 프로토콜만 쿠키 전송 허용

  • HttpOnly
    • Default ='false', true 설정 시 Java Script에서 쿠키의 사용자 정보에 접근가능 -> XSS 공격 위험

  • sameSite
    • 요청을 보낸 Origin, Domain, Protocol, Port가 하나라도 다를 시 Cross-Origin으로 구분
    • Lax: 사이트가 서로 달라도, GET 요청이라면 쿠키 전송이 가능하다.
    • Strict: 사이트가 서로 다르면, 쿠키 전송을 할 수 없다.
    • None: 사이트가 달라도, 모든(GET, POST, PUT 등등) 요청에 대해 쿠키 전송이 가능하다.
    • 이러한 옵션들을 지정 후,
    • 서버 -> 클라로 쿠키 전송 시 헤더의 Set-Cookie 프로퍼티에 쿠키를 담아 전송
    • 클라 -> 서버로 쿠키 전송 시 헤더의 Cookie 프로퍼티에 쿠키를 담아 전송

💡 Session

사용자가 로그인에 성공 후, 다음 인증을 필요로 하는 작업 수행 시 매번 로그인을 해야 할까?

위처럼 인증작업을 수행 할 시, 수 많은 로그인 요청으로 인해 서버의 리소스를 많이 낭비할 수 있다

클라이언트의 저장된 쿠키에 고유한 세션id를 담아 expire옵션 등을 설정하여 간편하게 자격 증명을 검증할 수 있다.


세션의 특징

  • 사용자가 로그인(인증)에 성공한 상태를 세션이라고 함
  • 서버는 별도의 저장소에 세션을 저장함 (ex: redis 등 트랜잭션이 빠른 DB)
  • 세션이 만들어지면 고유한 세션id 생성 후 클라이언트에 전송 될 응답쿠키에 세션id를 담아 전송
  • 쿠키에 담긴 인증 성공 정보(세션id)를 이용해 서버의 api 접근 요청을 통한 서버 리소스 이용 가능
  • 쿠키에 세션id가 없으면, 인증 실패로 간주하고 Exception or Error 전송
  • 서버 = 세션id 발급 후 클라이언트의 쿠키에 담아 전송 후, 세션 저장 & 세션id로 인증 여부 판단
  • 클라이언트 = 쿠키 내부에 세션id 저장

세션id를 이용한 로그아웃 로직 구현

  • 서버에서 세션 정보를 삭제
  • 클라이언트에서 쿠키를 갱신
  • 서버가 클라이언트의 쿠키를 임의삭제 할 수 없으므로, set-cookie 프로퍼티의 값을 무효한 값으로 갱신하는 방법 사용

💡 웹 보안 공격

SQL Injection & Cross-Site Request Forgery (CSRF)


SQL Injection 공격 시나리오

  • 클라이언트의 input form에 직접 SQL 쿼리문 작성
  • AND 보다 연산 우선순위가 낮은 OR절의 '1'='1'; 가 입력되어 로그인이 성공하는 피해 발생
  • SQL 마무리 키워드인 ; 와 같이 중요 테이블을 DROP 하는 SQL 쿼리문 작성

SQL Injection 대응 방안

  • DTO필드에 Validation 적용
    • 필드의 유효성 검증으로 인해 SQL 쿼리 입력 불가능
  • Prepared Statement 사용
    • 클라이언트의 입력과 SQL문의 분리, SQL을 입력해도 Text로 인식되어 쿼리 실행 X
  • Error Handling
    • DB의 테이블/컬럼 등이 노출되지 않도록 Custom Error Handling 필요

Cross-Site Request Forgery (CSRF) 특징 & 방지

  • 다른 Site에서 HTTP 요청을 가로채 쿼리파라미터의 내용 수정 후 요청 전송
  • 쿠키 등을 사용한 로그인 방식으로 인한 same domain 검증으로 인한 방지
  • 해커가 예측할 수 없는 필드 등 정보 삽입으로 인한 방지
저작자표시 (새창열림)

'⚙️ Ops > CS' 카테고리의 다른 글

Context Switching & Thread Scheduling  (0) 2023.09.29
Race Condition  (0) 2023.04.14
Proxy & Load Balancer & WAS & VPC  (0) 2023.04.14
HTTP  (0) 2023.04.14
Web Application & Network  (1) 2023.04.14
'⚙️ Ops/CS' 카테고리의 다른 글
  • Race Condition
  • Proxy & Load Balancer & WAS & VPC
  • HTTP
  • Web Application & Network
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Lock #Thread #Concurrency
      React #Markdown
      GStreamer #Pipeline
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Cookie & Session & SQL Injection & CSRF
    상단으로

    티스토리툴바