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

0516dmswjd님의 프로필 이미지

작성한 질문수

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

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

백엔드 서버 외부 접속 차단

해결된 질문

24.08.25 18:28 작성

·

43

0

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

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

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

https://api.example.com/graphql

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

답변 2

0

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

2024. 10. 07. 17:43

안녕하세요! 0516dmswjd님!

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

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

  3. 주소창에 playground를 막는 방법은 apollo/server를 사용하신다면, playground: false 옵션을 지정해주시면 간단하게 해결됩니다!

0

인프런 AI 인턴님의 프로필 이미지

2024. 08. 27. 18:31

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

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

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