웹훅
1. 개요
웹훅은 "사용자 정의 HTTP 콜백"으로, 특정 이벤트 발생 시 미리 설정된 URL로 HTTP 요청을 보내도록 설계되었다. 코드 푸시, 댓글 게시 등 다양한 이벤트에 의해 트리거되며, 한 사이트의 이벤트를 다른 사이트의 동작을 호출하는 데 사용된다. 지속적 통합 시스템에서 빌드를 트리거하거나 버그 추적 시스템에 알림을 보내는 등 다양한 사용 사례가 있으며, HTTP를 사용하여 웹 서비스에 쉽게 통합될 수 있다. 웹훅 호출 시 스푸핑 공격과 재생 공격을 방지하기 위해 HTTP 기본 인증, 공유 비밀 키, HMAC 서명, SHA-1 서명, 상호 TLS 인증, IP 주소 제한 등 다양한 인증 기술이 사용된다.
-
웹 기술 -
공용 게이트웨이 인터페이스
공용 게이트웨이 인터페이스(CGI)는 웹 서버가 외부 프로그램을 실행하기 위한 표준 인터페이스이며, 웹 서버가 클라이언트 요청에 응답하여 프로그램을 실행하고 그 결과를 클라이언트에 전송하는 방식으로 동작한다. -
웹 기술 -
FastCGI
FastCGI는 웹 서버와 외부 애플리케이션 간 효율적인 통신을 위한 프로토콜로, CGI의 단점을 보완하여 지속적인 프로세스를 통해 웹 애플리케이션의 성능과 안정성을 향상시킨다. -
이벤트 (컴퓨팅) -
메시지 큐
메시지 큐는 프로세스나 스레드 간 비동기 통신을 제공하여 송신자와 수신자가 동시에 상호 작용할 필요 없이 메시지를 교환하도록 하며, 메시지는 수신자가 검색할 때까지 저장되고 시스템 장애 시 복원력을 제공하지만 보안 취약점, 특정 기업 종속성 등의 논란도 존재한다. -
이벤트 (컴퓨팅) -
비동기 입출력
비동기 입출력은 입출력 완료를 기다리지 않고 다른 작업을 처리하는 방식으로, 완료 시 콜백이나 시그널을 통해 결과를 알려주어 효율적인 자원 활용과 성능 향상을 가져다준다. -
HTTP -
HTTPS
HTTPS는 HTTP에 보안 기능이 더해진 통신 규약으로, 웹 브라우저와 서버 간 통신을 암호화하여 보안을 강화하지만, 인증서 비용, 서버 부하, 혼합 콘텐츠 문제 등의 단점도 존재한다. -
HTTP -
HTTP 쿠키
HTTP 쿠키는 웹 서버가 사용자 브라우저에 저장하는 작은 텍스트 파일로, 웹 사이트가 방문 기록, 로그인 정보 등을 기억하여 HTTP의 상태 비저장성을 보완하고 세션 관리, 개인 설정, 사용자 추적 등에 활용되지만 개인 정보 보호 및 보안 문제에 대한 논란이 있다.
2. 기능
웹훅은 "사용자 정의 HTTP 콜백"이다. 일반적으로 코드 저장소에 코드를 푸시하거나, 블로그에 댓글이 게시되는 등 다양한 이벤트에 의해 트리거된다. 해당 이벤트가 발생하면 소스 사이트가 웹훅에 대해 구성된 URL로 HTTP 요청을 보낸다. 사용자는 한 사이트에서 발생한 이벤트가 다른 사이트에서 동작을 호출하도록 웹훅을 구성할 수 있다.
일반적인 사용 사례는 지속적 통합 시스템으로 빌드를 트리거하거나 버그 추적 시스템에 알림을 보내는 것이다. 웹훅은 HTTP를 사용하므로 새로운 인프라를 추가하지 않고도 웹 서비스에 통합할 수 있다.
3. 웹훅 알림 인증
클라이언트(원천 웹사이트 또는 애플리케이션)가 타사 사용자의 서버에 웹훅 호출을 할 때, 들어오는 POST 요청은 스푸핑 공격을 방지하기 위해 인증되어야 하며, 재생 공격을 방지하기 위해 타임스탬프가 확인되어야 한다. 클라이언트를 인증하기 위해 다양한 기술이 사용된다.
* HTTP 기본 인증을 사용하여 클라이언트를 인증할 수 있다.
* 웹훅은 어떤 유형의 이벤트인지에 대한 정보와 웹훅을 확인하기 위한 공유 비밀 키 또는 디지털 서명을 포함할 수 있다.
* HMAC 서명을 HTTP 헤더로 포함할 수 있다. 깃허브(GitHub), 스트라이프(Stripe) 및 페이스북(Facebook)은 이 기술을 사용한다.
* SHA-1을 사용하여 요청에 서명한다. 페이스북(Facebook)은 이 방법을 사용하고 있다.
* 연결이 설정될 때 상호 TLS 인증을 사용할 수 있다. 그러면 엔드포인트(서버)가 클라이언트의 인증서를 확인할 수 있다.
* 보내는 측은 요청이 전송될 IP 주소의 일정한 목록을 유지하도록 선택할 수 있다. 이것은 그 자체로 충분한 보안 조치는 아니지만, 수신 엔드포인트가 방화벽 또는 NAT 뒤에 있을 때 유용하다.
3.1. 인증 기술
클라이언트(원천 웹사이트 또는 애플리케이션)가 타사 사용자의 서버에 웹훅 호출을 할 때, 들어오는 POST 요청은 스푸핑 공격을 방지하기 위해 인증되어야 하며, 재생 공격을 방지하기 위해 타임스탬프가 확인되어야 한다. 클라이언트를 인증하기 위해 다양한 기술이 사용된다.
* HTTP 기본 인증을 사용하여 클라이언트를 인증할 수 있다.
* 웹훅은 어떤 유형의 이벤트인지에 대한 정보와 웹훅을 확인하기 위한 공유 비밀 키 또는 디지털 서명을 포함할 수 있다.
* HMAC 서명을 HTTP 헤더로 포함할 수 있다. 깃허브(GitHub), 스트라이프(Stripe) 및 페이스북(Facebook)은 이 기술을 사용한다.
* SHA-1을 사용하여 요청에 서명한다. 페이스북(Facebook)은 이 방법을 사용하고 있다.
* 연결이 설정될 때 상호 TLS 인증을 사용할 수 있다. 그러면 엔드포인트(서버)가 클라이언트의 인증서를 확인할 수 있다.
* 보내는 측은 요청이 전송될 IP 주소의 일정한 목록을 유지하도록 선택할 수 있다. 이것은 그 자체로 충분한 보안 조치는 아니지만, 수신 엔드포인트가 방화벽 또는 NAT 뒤에 있을 때 유용하다.