Refresh Token이 탈취 당했을 경우을 대비하기 위한 방법이 무엇이 있을까요?
공격자가 Refresh Token을 탈취할 경우 탈취한 토큰을 이용해서 Access Token을 발급 받아 서버에 접근할 수 있다는 보안상의 위험이 있습니다. 이를 막기위해 Refresh Token Rotation 보안 강화 방식을 활용할 수 있습니다. 이 방식은 Access Token을 재발급 받을 때 Refresh Token을 재발급 받는 방식으로, 공격자가 Refresh Token을 탈취해도 Refresh Token이 재발급되면 탈취된 토큰이 무효화 되면서 서버에 접근이 불가능해질 수 있습니다.
하지만 Refresh Token 재발급 요청이 빈번해지면서 서버 과부하 문제가 발생할 수 있다는 문제가 있습니다. 이를 막기 위해 애플리케이션 서버와 인증 서버를 분리 할 수 있습니다. Redis와 같은 인메모리 저장소를 인증 서버로 사용하게 되면 과부하를 방지 할 수 있습니다.
CSRF 공격이 무엇이고 해결 방법에 대해서 설명해주세요.
Cross Site Request Forgery 공격으로 사용자 의지와 무관하게 공격자의 의도대로 서버에 특정 요청을 하도록 하는 공격입니다.해결 방법으로는 CSRF Token 발급 방식이 있습니다. 서버에 들어온 요청이 실제 서버에서 허용한 요청이 맞는지 확인하기 위한 토큰을 발급하는 방식으로, 서버에서는 랜덤으로 생성된 Token을 사용자 세션과 웹 사이트 폼에 삽입하여 저장해두고 이후 사용자가 서버에 작업을 요청할 때 페이지에 숨어있는 Token 값이 같이 서버로 전송됩니다. 서버는 이 Token 값이 세션에 저장된 값과 일치하는지 확인하여 위조 여부를 확인할 수 있습니다.
SQL Injection이 무엇이고 해결 방법에 대해 설명해주세요.
SQL Injection은 악의적인 사용자가 애플리케이션의 입력 필드를 통해 SQL 쿼리에 악성 코드를 삽입해서 데이터베이스에 부적절한 접근을 시도하는 보안 취약점 입니다.
이를 막기 위해 ORM을 도구를 사용하여 SQL 쿼리를 직접 작성하지 않고 객체단에서 다룰 수 있도록 설계하거나 Prepared Statement를 사용하는 방식이 있습니다. Java의 PreparedStatement를 사용하면 SQL의 쿼리와 파라미터를 분리하여 처리할 수 있어서 사용자 입력이 SQL 코드로 해석되는 것을 방지할 수 있습니다. ? 플레이스 홀더에 값을 바인딩 할 셩우 JDBC가 자동으로 입력 값을 이스케이프 처리해서 SQL Injection을 방지할 수 있습니다.
HTTP보다 HTTPS가 저 안전한 이유는 무엇인가요?
HTTP는 데이터 전송 과정에 암호화 과정이 포함되어 있지 않기 때문에 보안 위협에 쉽게 노출될 수 있지만, HTTPS는 TLS나 SSL 프로토콜을 사용하여 요청과 응답을 암호화하기 때문에 더 안전합니다.
세션 기반 인증과 토큰 기반 인증에 대해 말씀해 주세요.
세션 기반 인증은 인증 정보를 서버에 저장하는 방식이고, 토큰 기반 인증은 인증 정보를 클라이언트가 가지고 헤더에 실어 보내는 방식입니다.
세션의 경우 쿠키 헤더에 세션 아이디만 실어 보내면 되므로 트래픽을 적게 사용하고, 토큰은 담겨있는 정보가 세션 ID에 비해 크기 때문에 더 많은 트래픽을 사용합니다.
토큰 방식이 더 많이 사용되는 가장 큰 이유는 확장성이 더 좋기 때문입니다. 서버가 확장되면 세션 기반 인증은 별도의 작업을 해주지 않으면 세션 불일치 문제를 겪게 되는데 토큰 기반 인증은 이런 세션 불일치 문제로부터 자유롭습니다.
웹 애플리케이션의 보안 취약점들에 대해 몇가지 말씀해 주세요.
SQL Injection(삽입), XSS(크로스 사이트 스크립트), CSRF(교차 사이트 요청 위조) 등이 있습니다.SQL 삽입은 악의적인 SQL문을 실행되게 해 DB를 비정상적으로 조작하는 공격 방법이며, XSS는 웹 사이트에 악성 스크립트를 삽입하는 공격 방법, CSRF는 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 하도록 유도하는 것을 의미합니다.
참고
- https://singularity7606.tistory.com/19
- https://velog.io/@ouk/SQL-%EC%9D%B8%EC%A0%9D%EC%85%98SQL-Injection%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%B0%A9%EC%96%B4%ED%95%98%EB%82%98%EC%9A%94
- https://codevang.tistory.com/282
- 세션 기반 인증과 토큰 기반 인증 (feat. 인증과 인가)
- [인증/인가] 쿠키 VS 세션 VS 토큰 (JWT) 방식 중 무엇을 사용할까?