Web/Security

    OAuth 2.0

    웹 사이트들을 돌아다니다 보면 흔하게 볼 수 있는 소셜 로그인 인증 방식은 OAuth 2 라는 기술을 바탕으로 구현된다. OAuth는 인증을 중개해주는 매커니즘이다. 보안된 리소스에 액세스하기 위해 클라이언트에게 권한 제공 프로세스를 단순화하는 프로토콜이다. 이미 사용자 정보를 갖고 있는 웹 서비스(Github, Google, Facebook 등)에서 사용자의 인증을 대신해주고, 접근 권한에 대한 토큰을 발급한 후, 이를 이용해서 해당 앱에서 인증이 가능하도록 한다. 하지만 OAuth가 모든 것을 해결해주는 것은 아니다. 사용자 정보가 내 서버에 저장된다는 사실에는 변함이 없기 때문이다. OAuth는 Authentication(인증)을 다른 서비스에 맡길 뿐, Authorization(권한 관리)는 순전..

    Token

    Token-based Authentication을 사용하는 이유 Session 기반 인증은 서버 혹은 DB에 유저 정보를 담는 인증 방식이었다. 서버에서는 유저가 민감하거나 제한된 정보를 요청할 때마다 갖고 있는 세션 값과 일치하는 세션 아이디를 갖고 있는지 확인한다. 매 요청마다 이러한 작업을 진행하는 것이 불편하기 때문에 토큰 기반 인증 방식이 등장했다. 클라이언트에서 인증 정보를 보관 '토큰' 하면 동전을 떠올리게 될 것이다. 현실에서는 주로 돈과 교환되는 시설 이용권에서 비롯된 용어라고 보면 된다. 클라이언트에서 인증 정보를 보관하기 위해 토큰 기반 인증 방식이 고안되었다. 하지만 클라이언트는 XSS, CSRF 공격에 대비하기 위해서 민감한 정보를 담으면 안되는데, 어떻게 이러한 방식이 유효할 수..

    Session

    Session은 쿠키의 보안 취약성을 보완하기 위해 등장했다. 쿠키는 데이터를 클라이언트에 저장한다면, Session은 데이터를 서버에 저장한다. 쿠키에는 세션의 key만을 두기 때문에 한결 더 보안이 강화된다. 어떻게든 세션을 저장해두어야 하기 때문에 메모리를 사용하며, 서버 성능 이슈를 발생시킬 수 있다. 로그인 로그인 시, 사용자가 정확한 아이디와 비밀번호를 입력했다면 서버는 인증(Authentication)에 성공했다고 판단할 것이다. 그리고 다음 번에 인증을 필요로 하는 작업을 할 때에는 동일한 인증 작업을 굳이 다시 할 필요가 없을 것이다. 다시 말해, '인증에 성공했음'을 서버가 알고 있다면 매번 로그인할 필요가 없게 해야 한다는 것 이다. 이러한 작업을 위해 필요한 것은 다음과 같다. 서버..

    Cookie

    쿠키는 서버에서 클라이언트에 데이터를 저장하는 방법 중 하나이다. 이를 이용해서 서버는 원한다면 쿠키를 이용해서 클라이언트의 데이터를 가져올 수 있다. 그러므로 쿠키를 이용한다는 것은 단순히 서버에서 클라이언트로 쿠키를 전송하는 것 뿐만이 아니라, 클라이언트에서 서버로 쿠키를 전송하는 것 도 포함된다. 서버가 클라이언트에 데이터 저장 쿠키는 클라이언트에 저장될 수 있지만, 데이터를 저장한 이후 아무 때나 데이터를 가져올 수는 없다. 데이터를 가져오기 위한 조건이 있으며, 이를 쿠키 옵션 이라고도 표현한다. 1. Domain 쿠키 옵션에서의 도메인에는 서브 도메인 및 세부 경로를 포함하지 않는다. 만약 쿠키 옵션에 도메인 정보가 존재한다면 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키 전송이 가능하..

    HTTPS

    HTTPS는 HyperText Transfer Protocol Secure Socket layer 의 약자이며, HTTP over SSL(TLS), HTTP over Secure라고 부르기도 한다. HTTPS는 HTTP 요청을 SSL 혹은 TLS라는 Algorithm을 활용해서 HTTP 통신을 하는 과정에서 내용을 암호화하여 데이터를 전송하는 방법이다. HTTPS를 이용하면 데이터 제공자의 신원을 보장받을 수 있으며, 이렇게 신원을 확인하고 보장받는 것이 중요한 이유는 다음과 같다. 클라이언트는 데이터 제공자의 데이터를 어떻게든 사용하게 되어 있다. 그렇기에 요청 및 응답을 중간에서 가로채는 중간자 공격 에 취약해진다. 데이터는 중간에 다른 도메인을 거쳐서 전달되기 때문에 어떤 도메인에서 제공되었는지 에..