인프런 커뮤니티 질문&답변

0516dmswjd님의 프로필 이미지
0516dmswjd

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

17-네트워크와 트러블슈팅

백엔드 서버 외부 접속 차단

해결된 질문

작성

·

69

0

백엔드를 "https://api.example.com"

프론트엔드를 "https://example.com"

이렇게 배포했습니다. 그런데 백엔드 서버는 example.com 이 주소에서 api 요청만 가능하고,

https://api.example.com/graphql

은 주소창에 검색해도 접속 못하게 하고 싶습니다. 어떻게 해야할까요?

답변 2

0

노원두님의 프로필 이미지
노원두
지식공유자

안녕하세요! 0516dmswjd님!

  1. 백엔드서버에서 CORS 설정하실 때, example.com 사이트만 허용하도록 수정해 주세요!

  2. 하지만, 서버 to 서버로는 요청이 가능하므로 요청 서버는 확인하여 허용해 주세요!

  3. 주소창에 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 헤더)를 검사하여, 이 헤더가 설정되어 있지 않거나 기대하는 도메인을 포함하지 않는 경우 접속을 막는 로직을 백엔드에 추가할 수 있습니다. 이 방법 역시 완전한 방법은 아니며, 일부 이용자에 의해 우회될 수 있습니다.

보안과 관련된 처리는 항상 전체 시스템 구조와 예상치 못한 상황을 고려하여 신중하게 설계되어야 합니다. 따라서 가능하다면 보안 전문가와 상의하는 것이 좋습니다.

참고하신다면 도움이 될 정보 출처입니다:

0516dmswjd님의 프로필 이미지
0516dmswjd

작성한 질문수

질문하기