<aside> 💡 #oauth #ssl #tls #https

</aside>

12.1 API 보안의 중요성

API는 로그인부터 시작해 모든 과정의 사용자 웹에서의 모든 상호작용에서 중요한 역할을 합니다. 그렇기에 API가 손상되거나 해킹이 된다면 사용자나 기업의 주요 데이터 보안, 유출 사고의 원인이 될 수 있습니다. 그렇기에 API를 사용하면서 보안을 철저히 유지되어야 합니다.

12.2 API 보안의 종류

인증과 권한부여

인증과 권한 부여는 API 보안의 핵심 요소입니다. 인증은 API를 사용하는 클라이언트의 신원을 확인하는 과정이며, 권한 부여는 인증된 클라이언트에게 적절한 권한 수준을 부여하는 것을 의미합니다.

OAuth

앞서 설명해 드렸던 OAuth 프레임워크를 사용하여 인증과 권한 부여를 구현할 수 있습니다. 클라이언트가 API에 액세스하려면 인증 서버에서 발급한 액세스 토큰을 사용하여 자신의 신원을 인증해야 합니다. 이러한 인증 과정을 통해 클라이언트의 신뢰성을 확인할 수 있습니다. 또한 API를 사용하는 클라이언트에게는 적절한 권한 수준을 부여해야 합니다. 예를 들어, 관리자 계정은 모든 API 기능에 대한 완전한 권한을 가지고 있을 수 있지만, 일반 사용자는 제한된 기능에만 액세스할 수 있도록 권한을 제한할 수 있습니다. 이를 통해 권한 남용과 무단 액세스를 방지할 수 있습니다. 현재 google, naver, kakao 등 다양하게 로그인 OAuth를 제공하고 있으며 API key를 발급받아 손쉽게 로그인을 구축할 수 있습니다.

데이터 암호화

데이터 암호화는 API를 통해 전송되거나 저장된 데이터를 보호하기 위한 장치입니다. 암호화를 통해 악의적인 공격자로부터 데이터를 보호할 수 있습니다.

SSL/TLS

현재 가장 많이 사용되고 있는 데이터 암호화를 위한 장치로써 SSL/TLS 프로토콜은 컴퓨터 네트워크상에서 데이터를 기밀성, 무결성, 인증 등의 보안 서비스를 제공하여 데이터의 안전성을 보장합니다. 공개키 암호화와 대칭키 암호화를 혼합하여 사용하며 여러 설정 단계에서 클라이언트와 서버 간의 암호화 알고리즘을 통해 데이터 전송 단계에서 암호화가 되어 전송됩니다.

입력 유효성 검사

사용자로부터 받은 입력값이 정해진 규칙에 부합하는지 확인하는 과정을 말합니다. 잘못된 입력을 방지하고 안전한 데이터를 처리할 수 있습니다. 숫자가 입력되어야 하는 경우 유효성 검사를 통해 숫자인지 텍스트인지 확인하고 그렇지 않으면 재입력을 요구합니다.

크로스 사이트 스크립팅(XSS)은 웹 애플리케이션에서 가장 흔한 취약점으로 악의를 가지고 웹 페이지에 사용자들이 보는 게시글 안에 악성 스크립트를 삽입하여 입력받은 값을 검사하지 않아 문제가 발생합니다. 이 취약점을 통해 해커가 사용자의 정보를 가져가고 웹 페이지 상에 문제를 발생시키며 시스템 관리의 권한까지 얻을 수도 있으며 다른 웹사이트와 정보를 주고받는 방식으로 작동하여 사이트 간 스크립팅이라고 합니다.

XSS를 방지하기 위해서는 입출력 값에 대한 검증과 무효화가 필수적입니다. 사용자 입력값에 신뢰할 수 있는 문자나 태그만 허용하도록 하고 XSS 공격은 주로 <script> 태그를 사용하기에 이 값을 차단하기 위한 (<, >)와 같은 문자를 필터링을 해합니다. 또한 쿠키에 정보를 저장하지 않거나 HttpOnly속성(브라우저에서 쿠키에 접근하지 못하게 방지하는 속성)을 사용하여 스크립트에서 쿠키에 접근하지 못하도록 해야 합니다.

API 통신 보안

API 통신 보안은 API 호출과 응답에 대한 보안을 강화하는 것을 말합니다. 일반 HTTP에서 프로토콜의 문제점은 서버에서 전송되는 정보가 암호화되지 않기에 데이터가 중간에 노출되는 취약점이 있습니다.

HTTPS

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer) 프로토콜은 TSL/SSL 인증서를 통해 정보가 암호화를 시켜줍니다. 사용자가 웹 페이지에 연결하면 웹 페이지에서 보안 세션을 시작하여 SSL 인증서를 전송하여 클라이언트와 서버가 보안 연결을 설정합니다. 그리고 주고받는 과정을 TLS Handshake라고 하며 서로의 정보를 교환하며 검증하는 알고리즘을 구성합니다.