토큰은 크게 접근 토큰, 보안 토큰, 세션 토큰 등으로 분류한다. 이중 로그인에서 보는 접근 토큰이 가장 많이 사용된다, 간략히 어떤 특정 기능이나 데이터에 접근하는 대상에게 권한을 부여하는데 사용된다.
접근 토큰(access token)을 많이 볼 수 있는 것은 JWT(JSON Web Token)이다. JWT(https://jwt.io)는 유저 정보를 담은 객체를 문자열로 만들어 암호화한 후 암호화된 키를 브라우저에 주는 형식으로 사용한다. 받아온 암호화된 키는 브라우저 저장소에 저장했다가 유저 정보가 필요한 API를 사용할 때 키를 보내면, 백엔드는 해당 키를 복호화해서 사용자를 식별한 후 접근을 허가한다.
이때 JWT에는 발급 받은 서버에서 정상적으로 발급 받았다는 사인도 가지고 있기에 식별할 수 있다. 다만, 위 사이트에 접속하면 우리가 암호화한 토큰 정보다 낱낱이 나타난다. 혹여나 토큰을 탈취 당한다면 사용자 정보가 그대로 빼앗길 수 있으니 관리의 중요성을 강조할 필요가 있다.
누구든지 복호화가 가능하기 때문에 JWT는 토큰 만료시간을 짧게 준다. 또한 복호화된 정보에는 토큰 만료 시간이 들어 있지만 JWT에는 signiture라는 코튼의 비밀번호가 존재하기 때문에 이 비밀번호가 없다면 조작은 어렵다. 이 비밀번호는 보통 백엔드에서 생성하기 때문에 알기 어렵다. 토큰 자체를 주고 받으며 토큰이 맞냐 아니냐를 판단(authorization)하기 때문에 사용자의 아이디와 비밀번호를 주고 받으며 통신하는 것보다는 조금 더 보안성이 높다.
물론, 여기에서 토큰 자체를 조작하진 못하더라도 정보는 가져갈 수 있디 때문에 이를 위한 방지 방법으로 클라이언트에서 읽기(getitem)가 불가능한 서버를 통해서만 일곡 쓸 수 있는 전용 cookie로 관리하는 편이다.
authentication과 authorization
authentication(인증) : 로그인 후 토큰을 받아오는 과정
authorization(인가) : 리소스에 접근할 수 있도록 토큰을 확인하는 과정
XSS는 Cross site script라고 부르는 정보 탈취 공격이다. 매우 간단하지만 생각보다 공격하기도, 받기도 쉬운 방법이다.
공격자가 상대방의 브라우저에서 스크립트가 실행되도록 만드는 방식이다.
사용자의 세션을 가로채기, 웹사이트 변조, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 진핸하는 것들이다.
주로 스크립트 코드를 삽입해서 입력이 되면 위와 같은 공격이 진행된다.
사이트를 방문하는 무차별적인 사람을 대상으로 공격한다. 즉, 게시판에 글을 올리면 클릭하는 사람을 대상이 피해자가 된다.
홈페이지 시스템에서 게시글 올려보기
안녕하세요 <script> alert('XSS 취약점 점검') </script> 테스트합니다.
이렇게 스크립트에서 경고창을 띄우는 함수를 사용하여 글을 올리고 내가 올린 게시판을 클릭하여 경고창이 뜨면 해당 사이트는 조치가 취해질 때까지 사용하면 안된다.
Cross-site request forgery라고 불리며, 사용자가 특정 웹사이트를 공격자가 원하는 방식으로 공격하게 만드는 방식이다. 흔히 사용하는 방법은 이메일로 사이트에 로그인하도록 만들게 하는 링크를 건다.
ex) 계좌이제 링크
링크를 클릭하게 되면 로그인하고, 공격자가 의도한 대로 돈이 자동으로 송금된다.
특정 서비스를 제공하는 서버를 대상으로 한다.
출처