웹 개발 언어는 HTTP 요청을 전송하는 라이브러리 제공
PHP : pup-curl
NodeJS : http
파이썬 : urllib, requests
이러한 라이브러리는 요청을 보내는 클라이언트 뿐 아니라 서버간 통신을 위해도 사용.
일반적으로 다른 웹 애플리케인션에 존재하는 리소스를 사용하기 위한 목적으로 통신.
웹 서비스의 구성요소가 증가함으로서, 관리 및 코드의 복잡도를 낮추기 위해 마이크로서비스들로 웹 서비스 구현
마이크로서비스는 HTTP, GRPC 등을 사용해 API 통신
마이크로서비스란?
소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식이다.
API란?
API란 Application Programming Interface의 줄임말로 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘이다.
이런 서비스 간 HTTP 통신이 이뤄질때 요청 내에 이용자의 입력값이 포함 될 수 있는데, 이용자의 입력값으로 의도하지 않은 요청이 전송될 수 있음.
Server-side Request Forgery(SSRF)는 웹 서비스의 요청을 변조하는 취약점이다.
브라우저가 변조된 요청을 보내는 CSRF와는 다르게 웹 서비스의 권한으로 변조된 요청을 보낼 수 있음.
웹 서비스는 외부에서 접근할 수 없는 내부망을 사용할 때가 있음.
대표적인 기능으로 백오피스 서비스가 존재.
백오피스 서비스란 관리자 페이지이다.
웹 서비스는 의심스러운 행위를 탐지하고 실시간으로 대응하기 위해 백오피스의 기능을 실행 할 수 있음.
이는, 웹 서비스는 외부에서 직접 접근할 수 없는 내부망 서비스와 통신 할 수 있다는 소리다.
웹 서비스가 보내는 요청을 변조하기 위해서는 요청 내에 이용자의 입력값이 포함되어야 함.
웹 서비스가 이용자가 입력한 URL에 요청을 보내거나 요청을 보낼 URL에 이용자 번호와 같은 내용이 사용되는 경우, 그리고 이용자가 입력한 값이 HTTP Body에 포함되는 경우로 나눠볼 수 있음.
구분 문자(Delimiter)
일반 텍스트 또는 데이터 스트림에서 별도의 독립적 영역 사이의 경계를 지정하는 데 사용하는 하나의 문자 혹은 문자들의 배열. URL 구분 문자는 "/"(Path identifier), "?"(Query identifier) 등이 있으며 구분 문자에 따라 URL 해석이 달라진다.