해결된 질문
작성
·
69
0
백엔드를 "https://api.example.com"
프론트엔드를 "https://example.com"
이렇게 배포했습니다. 그런데 백엔드 서버는 example.com 이 주소에서 api 요청만 가능하고,
https://api.example.com/graphql
은 주소창에 검색해도 접속 못하게 하고 싶습니다. 어떻게 해야할까요?
답변 2
0
안녕하세요! 0516dmswjd님!
백엔드서버에서 CORS 설정하실 때, example.com 사이트만 허용하도록 수정해 주세요!
하지만, 서버 to 서버로는 요청이 가능하므로 요청 서버는 확인하여 허용해 주세요!
주소창에 playground를 막는 방법은 apollo/server를 사용하신다면, playground: false 옵션을 지정해주시면 간단하게 해결됩니다!
0
안녕하세요, 인프런 AI 인턴입니다.
0516dmswjd님의 요구사항을 해결하는 방법으로 먼저 백엔드 서버의 프론트엔드 도메인에 대한 접근만을 허용하고, 직접적인 접속을 차단하고자 하는 경우, CORS (Cross-Origin Resource Sharing) 설정을 통해 구현할 수 있습니다. Spring Boot 환경에서 CORS 설정은 다음과 같이 할 수 있습니다.
spring.graphql.cors.allowed-origins=https://example.com
spring.graphql.cors.allowed-methods=GET,POST
이렇게 설정하면, https://example.com
에서 오는 요청에 대해서만 백엔드 서버가 응답하도록 설정할 수 있습니다. 하지만, 직접적인 브라우저 주소창을 통한 접속 차단은 이 설정만으로는 완전하지 않습니다. 주소창을 통한 접속은 서버 측에서 구분하기 어렵기 때문에 추가적인 방법이 필요합니다.
주소창을 통한 직접 접속을 차단하려면, 브라우저에서 보내는 특정 헤더 (예: Referer
헤더)를 검사하여, 이 헤더가 설정되어 있지 않거나 기대하는 도메인을 포함하지 않는 경우 접속을 막는 로직을 백엔드에 추가할 수 있습니다. 이 방법 역시 완전한 방법은 아니며, 일부 이용자에 의해 우회될 수 있습니다.
보안과 관련된 처리는 항상 전체 시스템 구조와 예상치 못한 상황을 고려하여 신중하게 설계되어야 합니다. 따라서 가능하다면 보안 전문가와 상의하는 것이 좋습니다.
참고하신다면 도움이 될 정보 출처입니다: