본문 바로가기

해킹&보안/웹 & 앱

상태 코드 확인 및 변경 (실습)

상태 코드는 Express에서만 결정하는 것만이 아니라 웹 애플리케이션의 개발자가 결정할 수도 있다.

요청하는 파라미터가 서버가 정한 형식과 맞지 않으면 잘못된 요청 정보의 상태를 브라우저에 전달할 수 있다. 

 

// (routes/api.js)

router.get("/", (req, res) => {
    let message = req.query.message;  //추가
    res.send({ message });   //수정
});
  1. api.js의 GET 라우팅에 쿼리 스트링 message의 값을 받는 코드를 추가한다
  2. res.send함수의 인수로 message변수를 설정하도록 수정한다
서버를 재시작하고 http:/ /localhost:3000/api/?message=hello로 접속하면 아래와 같이 표시된다

http:/ /localhost:3000/api/?message=hello 접속


// (routes/api.js)

router.get("/", (req, res) => {
    let message = req.query.message;

    if (message === ""){    //추가
        res.status(400);	//추가
        message = "message 값이 비었음";	//추가
    }	
    res.send({ message });
});
  1. 쿼리스트링 message의 빈 값 여부를 체크하는 작업을 추가한다
  2. message가 빈 값이면 상태코드를 400으로 하고 에러 메시지를 message변수에 대입하도록 수정

 

await fetch("http://localhost:3000/api?message=");
  1. HTTP서버를 다시 시작하고 http://localhost:3000에 접속한다.
  2. 브라우저 개발자 도구의 콘솔 패널을 열고 위 코드를 입력한다.

안전한 통신을 위한 HTTPS

HTTP 통신이 안전하다가노느 말할 수 없다. 원래 HTTP 프로토콜은 HTML 문서를 전송하기 위해 고안된 통신 프로토콜이므로 보안은 고려되지 않았기 떄문이다. 시대의 흐름이 변하면서 웹과 HTTP는 다양한 데이터를 다루고 있다.

 

HTTP의 약점

  1. 통신 데이터 도청이 가능한 점
    • HTTP는 통신 데이터를 암호화하는 시스템은 없다. 공격자가 통신 경로의 도청이 가능하다면 사용자가 주고 받는 데이터를 훔쳐볼 수 있다.
  2. 통신 상대의 진위 여부 확인이 어려운 점
    • HTTP는 통신 대상 서버가 실제 서버인지 진위 여부를 확인하는 시스템이 없어서 암호화되지 않은 HTTP 통신 경로는 공격자가 요청 URL로 서버인 척할 수 있다.
    • 브라우저는 URL로 통신상대를 특정하기떄문에 통신 상대의 진위 여부를 확인할 수 없다. 민감한 정보를 전송하는 서버가 공격자가 만든 서버라면 공격자에게 정보가 넘어가게 된다
  3. 통신 과정에서 데이터 수정 여부가 확인이 안 되는 점
    • 통신 경로에서는 통신 내용이 올바른지 검증하는 구조가 없다.
    • 상대가 전송한 데이터와 전송받은 데이터가 일치하는지 검증할 수 없기 떄문에 통신 과정에서 공격자가 데이터 내용을 수정하더라도 알 수 없다.

HTTP 약점을 해결하는 TLS

HTTP의 세가지 약점을 해결하려면 HTTPS를 사용해서 통신해야한다. HTTPS는 TLS라고 하는 통신 프로토콜을 사용해 HTTP 데이터를 암호화해서 통신하는 구조다. HTTP데이터 통신을 하기 전에 TLS 핸드셰이크라고 하는 일련의암호 통신 과정을 진행한다

  1. 통신 데이터 암호화
    • TLS는 데이터를 암호화하는 기능과 데이터의 변조를 막는 기능을 제공한다.
    • 평문 데이터를 암호화하여 전송하면 상대는 암호문을 복호화하여 데이터의 내용을 볼수 있다.
    • 암호화와 복호화에 필요한 키는 브라우저와 서버의 통신을 통해 안전하게 공유되고, 키를 가지고 있을 떄만 암호문을 복호화할 수 있다.
  2. 통신 상대 검증
    • TLS는 전자 인증서로 통신 상대를 확인하며, 전자 인증서는 신뢰 가능한 기관인 CA에서 발행한다. 서버에서 전송된 인증서는 브라우저가 점증하고 다시 브라우저와 OS에 있는 인증서와 대조한다.
    • CA에서 발행되지 않은 인증서가 사용되면 브라우저는 경고를 표시한다. 서버는 반드시 신뢰할 수 있는 CA에서 발행된 인증서를 사용해야한다
  3. 통신 데이터 변경 체크
    • TLS는 데이터 변조를 체크하는 기능도 제공한다. 데이터의 내용을 볼 수 없더라도 공격자는 암호문을 변조할 가능성이 있따. 안전하게 데이터를 주고받으려면 데이터에 변조가 없는 것을 확인해야 한다. 
    • 이를 위해 TLS는 '인증 태그'라는 검증용 데이터를 사용한다. 인증 태그는 데이터의 암호화와 동시에 작성되어 상대에게 전송되며, 수신자는 복호화와 동시에 인증 태그를 사용해 암호문의 변조를 체크한다. 
    • 만약 변조가 발생한 경우에는 해당 데이터를 사용하지 않고 에러로 통신을 종료한다. 변조의 체크는 HTTP 통신뿐만 아니라  TLS 핸드셰이크 중에도 진행된다.

'해킹&보안 > 웹 & 앱' 카테고리의 다른 글

웹 해킹 실습  (0) 2025.01.08
FTP 보안  (1) 2024.09.21
GET / POST로 데이터 전송하기 (실습)  (2) 2024.09.14
메타데이터  (4) 2024.09.06
웹 실습  (0) 2024.08.21