택시짱의 개발 노트

웹 일반 ( 면접 질문 준비) 본문

카테고리 없음

웹 일반 ( 면접 질문 준비)

택시짱 2020. 11. 16. 15:56

HTTP 메소드중 GET과 POST에 대해서 설명

  • 둘다 HTTP 프로토콜을 이용해서 서버에 요청 할때 사용하는 방식이다.
GET
  • GET 방식은 HTTP Request Message의 Header 부분의 url에 담겨서 전송된다. 그러므로 url의 ?뒤에 붙어 ex) naver.com?search=hi 데이터가 붙어 reqeust를 보내게 된다. 이런 방식은 url 이라는 공간에 담겨 가기 때문에 전송 할수 있는 데이터의 크기가 제한적이다. 그리고 보안이 필요한 데이터는 이러한 GET 방식으로는 적절하지 않다.
POST
  • POST 방식은 HTTP Request Message의 Body 부분에 데이터가 담겨서 전송된다. 위의 GET 방식처럼 URL에 데이터가 담겨 전송 되는 방식에 비해 보안측면에서 낫다. 하지만 아무런 암호화를 거치지 않은 상태로 패킷 가로채기 ( 스니핑 sniffing )을 당하게 되면 그냥 그대로 정보를 노출 당할수 있다.

Session과 Cookie에 대해서 설명

  • Session과 Cookie를 왜 사용하는가 !?

    • HTTP의 특징이자 약점을 보안하기 위해서 사용된다. 특징이자 약점은 바로 Connectionless(비연결지향), Statelss(상태 정보 유지 안함)이다. 이때 Session과 Cookie가 없다면 로그인이 되었을때 글 작성이 가능한 사이트를 이용하고자 한다면 글을 작성 할 때마다 매번 아이디와 비밀번호를 작성해야 될것이다.
Cookie(쿠키)
  • HTTP의 일종으로 사용자가 어떠한 웹 사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이다. HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다.
Session(세션)
  • 서버(server)에 클라이언트의 상태 정보를 저장하는 기술로 논리적인 연결(?)을 세션이라고 한다. 웹 서버에 클라이언트에 대한 정보를 저장하고 클라이언트에게는 클라이언트를 구분할 수 있는 ID를 부여하는데 이것을 세션아이디라 한다.

HTTPS에 대해서 설명

  • HTTPS는 SSL의 껍질을 덮어쓴 HTTP라고 할 수 있다. 즉 HTTPS는 새로운 애플리케이션 계층의 프로토콜이 아니다. HTTP 통신하는 소켓 부분을 SSL(Secure Socket Layer) or TLS(Transport Layer Security)라는 프로토콜로 대처하는 것 뿐이다. HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신하게 된다. SSL 사용한 HTTPS는 암호화와 증명서, 안정성 보호를 이용할 수 있게 된다.

SQL Injection에 대해서 설명하고 방어 기법에 대해서 설명

  • SQl injection이란 ?
  • SQL Injection 이란 Web hacking 기법 중 하나이다. 웹 애플리케이션의 뒷단에 있는 Database에 질의(쿼리를 보내는 것)하는 과정 사이에 일반적인 값 외에 악의적인 의도를 갖는 구문을 삽입하여 공격자가 원하는 SQL 쿼리문을 실행하는 기법이다. 주로 사용자가 입력한 데이터를 제대로 필터링, 이스케이핑 하지 못했을 경우에 발생한다.
  • 방어 방법
    1. 대부분의 SQL Injection의 경우 값을 입력받을 때 특수문자 여부를 검사하여 방어한다. 아이이와 패스워드를 입력받는 입력에 특수문자가 포함되어 있는지 검증 로직을 추가하여 특수문자가 입력된 경우 해당 요청을 막아낼 수 있다.
    1. SQL 서버에 오류가 발생했을시 해당하는 에러 메시지를 표시해선 안된다.
      테이블에서는 모든 정보를 가지고 있지만 View를 사용하면 테이블의 일부만 보일 수 있고 접근 권한을 다르게 할 수도 있다. 원본의 테이블에는 접근 권한을 높이고 일반 사용자는 view로만 접근하게 되면 원본 테이블이 공격에 노출 되는 정도를 줄일 수 있다.
    1. Prepared Statement 구문 사용.
      Prepared STatement 구문을 사용하게 되면, 사용자의 입력 값이 데이터베이스의 파라미터로 들어가기 전에 DBMS가 미리 컴파일 하여 실행하지 않고 대기합니다. 그 후 사용자의 입력 값을 문자열로 인식하게 하여 공격쿼리가 들어간다고 하더라도, 사용자의 입력은 이미 의미 없는 단순 문자열 이기 때문에 전체 쿼리문도 공격자의 의도대로 작동하지 않습니다.
    1. hash function을 사용하자.
      사용자의 입력값을 데이터베이스에 그대로 저장하고 사용하지 말아야 한다. 특히 패스워드의 경우가 그렇다. 무조건 SHA-256 이상의 보안성을 갖는 해시함수로 해싱한 뒤 저장해야 한다.

XSS(Cross site scripting) 공격에 대해서 설명하고 방어 기법에 대해서 설명

  • XSS란?

    • XSS는 게시판이나 웹 메일 등에 자바 스크립트와 같은 스크립트 코드를 삽입 해 개발자가 고려하지 않은 기능이 작동하게 하는 치명적일 수 있는 공격이다. 또한 대부분의 웹 해킹 공격 기법과는 다르게 클라이언트 즉, 사용자를 대상으로 한 공격이다.
  • XSS 방지법

      1. script 문자 필터링 (?)
      1. htmlentities 사용 (?)

CSRF(Corss site request forgery)에 대해서 설명하고 방어 기법에 대해서 설명

  • CSRF란 ? (어렵...)

    • 웹 어플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취야하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격방법을 의미합니다.

XSS와 CSRF의 차이점

  • XSS: 클라이언트에서 발생/ CSRF: 서버에서 발생

Oauth2 인증에 대해서 설명

  • Oauth2란?

    • Oauth2는 인증을 위판 표준 프로토콜 이다. 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근권한을 부여할 수 있는 공통적인 수단, 접근 위임을 위한 개방형 표준

Restful API에 대해서 설명

  • Rest란?

    • "웹에 존재하는 모든 자원(이미지, 동영상, DB 자원)에 고유한 URI를 부여해 활용"하는 것으로, 자원을 정의하고 자원에 대한 주소를 지정하는 방법론을 의미한다고 한다. 따라서 Resutful API는 REST 특징을 지키면서 API를 제공하는 것을 의미 한다.
    • HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 Resource(URI)와 Method로 표현하여 특정한 형태로 전달하는 방식

JWT에 대해서 설명하고 Session 기반 인증 방식에 비해 장점을 설명

  • JWT (JSON WEB TOKEN)이란?

    • Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다.
      JWT는 토큰 자체를 정보로 사용하는 SElf-Contained 방식으로 정보를 안전하게 전달한다.
  • JWT의 구조

    • JWT는 Header, Payload, Signature의 3 부분으로 이루어지며, Json 형태인 각 부분은 Base64로 인코딩 되어 표현된다. 또한 각각의 부분을 이어주기 위해. 구분자를 사용하여 구분한다. 추가로 Base64는 암호화된 문자열이 아니고, 같은 문자열에 대해 항상 같은 인코딩 문자열을 반환한다.
    1. HEADER(헤더)

      • 토큰의 헤더는 typ와 alg 두 가지 정보로 구성된다. typ는 토큰의 타입을 나타냄 ex) JWT 토큰은 typ : JWT,
        alg는 헤더(Header)를 암호화 하는것이 아니고, Signature를 해싱하기 위한 알고리즘을 지정하는 것이다.
    1. PAYLOAD(페이로드)

      • 토큰의 페이로드에는 토큰에서 사용할 정보의 조각들인 클레임(Claim)이 담겨있다.
    1. Signature(서명)

      • 서명(Signature)은 토큰을 인코딩하거나 유효성 검증을 할 때 사용되는 고유한 암호화 코드이다. 서명(Signature)은 위에서 만든 헤더(Header)와 페이로드(Payload)의 값을 각각 BASE64로 인코딩하고, 인코딩한 값을 비밀 키를 이용해 헤더(Header)에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 BASE64로 인코딩하여 생성한다.
반응형
Comments